Java 机器人弹跳球

Java 机器人弹跳球,java,android,accelerometer,Java,Android,Accelerometer,所以我只是想让一个球在屏幕上弹起,由于重力的作用,它会减速,像普通球一样从墙上反射(弹起)。 有人能给出一些基本的和非常简单的实现吗? 其他例子似乎有点“过火”,似乎超出了我想要做的。 我试过这个: public void updateLogic() { if (x < -1) { xPos += (-x * gravity); } else if (x > 1) { xPos -= (x * gravity); }

所以我只是想让一个球在屏幕上弹起,由于重力的作用,它会减速,像普通球一样从墙上反射(弹起)。 有人能给出一些基本的和非常简单的实现吗? 其他例子似乎有点“过火”,似乎超出了我想要做的。 我试过这个:

public void updateLogic() {

    if (x < -1) {

        xPos += (-x * gravity);
    } else if (x > 1) {

        xPos -= (x * gravity);
    }
    if (y > 1) {

        yPos += (y * gravity);
    } else if (y < -1) {

        yPos -= (-y * gravity);
    }
}
public void updateLogic(){
如果(x<-1){
xPos+=(-x*重力);
}如果(x>1),则为else{
xPos-=(x*重力);
}
如果(y>1){
yPos+=(y*重力);
}如果(y<-1),则为else{
yPos-=(-y*重力);
}
}
这是我自己做的最接近的一次。 顺便说一下,x和y值来自加速度计。
任何帮助都将不胜感激,谢谢

我想你需要3样东西,力(x和y,你有),速度(称它们为xVel和yVel)和位置(xpo和ypo,你也有)。球的位置通过以下方式更新(以最简单的方式):

变量“dt”是timestep,它控制球移动的速度。但是,如果设置得太大,程序将不稳定!尝试dt=0.001左右开始,并逐渐将其设置得更高

然后,要使球从墙壁反射,只要在球碰到墙壁时翻转速度即可:

if (xPos > xMax) {
    xPos = xMax;
    xVel *= -1.0;
} else if (xPos < 0.0) {
    xPos = 0.0;
    xVel *= -1.0;
}
if(xPos>xMax){
xPos=xMax;
xVel*=-1.0;
}否则如果(xPos<0.0){
xPos=0.0;
xVel*=-1.0;
}
y也一样。“xPos=…”只是为了阻止球离开屏幕边缘。如果您希望球每次碰到墙时反弹得少一点,请将“-1.0”更改为“-0.9”或其他内容(这是最常用的)

希望就这些了。祝你好运

  • 你的x坐标不应该受到重力的影响
  • 我建议不要使用加速计,除非你了解简单情况下的物理原理
  • 把它分成几个阶段。首先,确保您可以使球以恒定速度下落

    一旦你开始工作,就要担心重力会导致速度增加


    一旦你有工作,担心与墙的交叉点和速度的变化。从墙上弹跳的一个简单算法是,当你撞到垂直墙时,将x速度乘以-1,当你撞到水平墙时,将y速度乘以-1

    关于实际代码的一些注释:

    • 这两条线的作用完全相同:

      yPos -= (-y * gravity);
      yPos += (y * gravity);
      
      xPos += (-x * gravity);
      xPos -= (x * gravity);
      
      同样地,这两条线的作用相同:

      yPos -= (-y * gravity);
      yPos += (y * gravity);
      
      xPos += (-x * gravity);
      xPos -= (x * gravity);
      

    • 您没有处理案例
      -1您的代码示例有什么不需要修复的地方?您还需要跟踪并更新xVelocity和yVelocity。问题是我还没有添加velocity,我很确定这正是我所缺少的,以确保它按我想要的方式运行。第二个问题是我不太明白如何实现它,所以我想知道我是否可以得到一个关于如何实现以及它如何工作的清晰简单的解释。我不是一个数学人,所以是的…哇,谢谢你帮了大忙。我使用加速度计的x和y值作为“力”,使用2.0f作为xVel和yVel。同时将dt设置为0.1f,似乎没有重力发生。我仍然需要用不同的数值进行实验,但到目前为止,这对我帮助很大。我让球以恒定的速度下落。然后实现了和墙(边界)的碰撞检测。现在唯一的问题是实现重力。根据你说的,我应该有一个常数(重力),影响y轴上的速度,导致yVel增加?没错。(假设你的y轴正指向下方,在Android和Swing中都应该如此)。查看我发布的源代码链接。顺便说一句,当你看到我影响X轴上的重力时,这是因为我试图根据手机的握法在两个轴上的各个方向实现重力。简单地说,用户控制重力方向,最终影响球。啊,我明白了。这是有道理的。