如果oldPosition不等于当前位置,我试图使对象反弹,但有时球会根据重力挂起。这就是我的检查方式;
@Override
public void react(int occurence) {
super.react(occurence);
/*Bounce*/
cantBounce = Math.abs(position.y - oldPosition.y) >= -.1f && Math.abs(position.y - oldPosition.y) <= .6f ;
distanceOldCurrent = Math.abs(position.y - oldPosition.y);
if(occurence == Tuples.HIT_BOTTOM && !cantBounce){
velocity.y = -velocity.y / 1.3f;
}else{
attemptRest(true);
}
}
这段代码意味着如果物体从底部撞击某物,则换成负速度,从而以另一种方式行进并弹跳。 &#39; distanceOldCurrent`变量检查它是否在y坐标上的任何一个方向上移动了0.5以上,以防止不断变化的速度,并在它应该停止时进行小反弹。然而,当模拟中的两个球在平台上和彼此上弹跳足够多次时,小球总是挂起。这可能不是DynamicBalls故障的代码,因为它们具有相同的代码,它们是DynamicBall的两个实例。这是一张会发生什么的图片。
以下是DynamicBall
react()
方法的代码
@Override
public void react(int occurence) {
super.react(occurence);
/*Bounce*/
cantBounce = Math.abs(position.y - oldPosition.y) >= -.1f && Math.abs(position.y - oldPosition.y) <= .6f ;
distanceOldCurrent = Math.abs(position.y - oldPosition.y);
if(occurence == Tuples.HIT_BOTTOM && !cantBounce){
velocity.y = -velocity.y / 1.3f;
}else{
attemptRest(true);
}
}
这是动态球超类的代码
@Override
public void react(int occurence) {
}
float elapsedTime = 0;
@Override
public void update() {
oldPosition.x = position.x;
oldPosition.y = position.y;
if(!cantBounce)
velocity.y += Globals.GRAVITY.y;
if((velocity.x <= .3f && velocity.x >= -.3f))
velocity.x = 0;
else
velocity.x -= 0.11f * Gdx.graphics.getDeltaTime();
if(canFall){
position.y += velocity.y;
}
position.x += velocity.x;
elapsedTime += 1 * Gdx.graphics.getDeltaTime();
}
public void attemptRest(boolean condition){
if(condition){
canFall = false;
}
}
如果你认为我足够详细,请更喜欢请帮忙!在这个问题期间我会非常积极。