【问题标题】:Default car speed?默认车速?
【发布时间】:2013-04-03 08:28:26
【问题描述】:

我的程序中有两个按钮。左按钮刹车(降低速度)和右按钮速度(增加速度)。当没有点击时,汽车具有默认速度。并且有最小 (0.3) 和最大 (2) 速度。现在,我在这里写了这个:

private float _speed = 1f;


    if (ButtonClicked) {

        if (brake) {

            float tempSpeed = _speed;
            tempSpeed -= 0.05f;

            if (tempSpeed <= 0.3) {
                //
            } else {
                _speed -= 0.05f;
            }

        }           

        if (speed) {

            float tempSpeed = _speed;
            tempSpeed += 0.1f;

            if (tempSpeed >= 2) {
                //
            } else {
                _speed += 0.1f;
            }           

        }           

    } else {

        float tempSpeed = _speed;

        if (tempSpeed < 1) {
            _speed += 0.1f;
        }

        if (tempSpeed > 1) {
            _speed -= 0.1f;
        }
    }

我不喜欢的部分是“ButtonsClicked”的“else”部分。这是默认的汽车速度部分。我增加或减少速度。车子动起来不好看,就是因为这个增减。我怎样才能让它变得更好?我的意思是,当什么都没有点击时,车速不会增加或减少吗?

【问题讨论】:

  • 为什么在什么都没有发生的情况下会有一个事件?你是怎么进入那个else的?
  • 如果你想要一个恒定的车速,然后删除“else”部分
  • 当没有人点击这些按钮之一时,它会转到其他部分。
  • 当我删除else部分时,我在哪里增加或减少到默认速度1?
  • 机芯哪里不好看?作为猜测:您的“默认”加速度与用户控制的加速度相同 - 也许使用较低的值会产生更好的效果?尝试在 else 块中将 0.1f 更改为 0.01f,看看是否有帮助。

标签: java performance algorithm logic game-physics


【解决方案1】:

我认为问题在于,一旦达到默认速度,它将不断加速/制动以保持该速度。由于您的问题并不能很好地解释问题,因此我们不确定。

这是我的意思的一个例子,你需要在默认速度周围创建一个“死区”:

private final float MAX_SPEED = 2f;
private final float MIN_SPEED = 0.3f;

private final float DEFAULT_SPEED = 1f;

private final float ACCEL_SPEED = 0.1f;
private final float BRAKE_SPEED = 0.05f;

private float _speed = DEF_SPEED;

if (ButtonClicked)
{
    if (accelerate)
    {
        _speed = Math.min(_speed + ACCEL_SPEED, MAX_SPEED);
    }

    if (brake)
    {
        _speed = Math.max(_speed - BRAKE_SPEED, MIN_SPEED);
    }
}
else
{

    // only modify the speed if its far off to
    // prevent it from constantly accelerating and braking
    // (modify the 0.5f to increase/decrease the 'dead zone')
    if (Math.abs(_speed - DEFAULT_SPEED) > 0.5f)
    {
        // slowly reset to default speed
        if (_speed < DEFAULT_SPEED)
            _speed += ACCEL_SPEED;

        if (_speed > DEFAULT_SPEED)
            _speed -= BRAKE_SPEED;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多