检查弹跳java libgdx时对象卡住了

时间:2015-10-15 00:28:25

标签: java libgdx

如果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的两个实例。这是一张会发生什么的图片。 The velocity in the image is not of the orange ball

以下是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;
    }
}

如果你认为我足够详细,请更喜欢请帮忙!在这个问题期间我会非常积极。

0 个答案:

没有答案