3

私の問題は、アイテムが同じ速度と時間で異なる画面間を移動することです。現時点では、アイテムは動かないか、速くなります。移動するアイテムと最大速度の 2 つのポイントを指定します。

Var _oneStep は、解像度を同期する私の試みです。

//Get a fraction of screen size?
_oneStep = ScreenWidth / 100;

//Delta being last update time.
public void MoveItem(double Delta)
{
    //Keep at Max speed.
    if(Math.abs(_xVelocity)  > _maxSpeed || Math.abs(_yVelocity)  > _maxSpeed)
    {
        _accelerationSpeed = 0.0001f * (_maxSpeed / _oneStep);
    }
    //Or Speed up.
    else
    {
        _accelerationSpeed = 0.00030f * (_maxSpeed / _oneStep);
    }
    //Destination is above 10% distance or below speed up or down

    _xVelocity += _accelerationSpeed * Math.cos(Math.toRadians(_degrees));
    _yVelocity += _accelerationSpeed * Math.sin(Math.toRadians(_degrees));

    _currentPosition.x += (((_xVelocity * _accelerationSpeed) + _oneStep) * Delta);
    _currentPosition.y += (((_yVelocity * _accelerationSpeed) + _oneStep) * Delta);

    CheckAtDestination();
}

いくつかの数字:

System.out.println("X: "+ _xVelocity + " Y: " + _yVelocity); = X: 1.0018943990787657 Y: 1.0109980390961948
System.out.println("XPos: "+ _currentPosition.x + " YPos: " + _currentPosition.x); = XPos: 36 YPos: 36
System.out.println("Degrees: " + _degrees); = Degrees: 80.22677351282063
System.out.println(Delta); = 0.3309303333093033

また、デルタが1以上になるとどうなりますか? 奇数の結果が生成されますか?

4

1 に答える 1

0

上記のコードは機能します。_oneStep 変数が screenWidth または Height であることを確認してください (オブジェクトのサイズによっては、画面に依存する可能性があります)。

したがって、_oneStep = ScreenWidth / 100; デルタはあらゆる動きに追加する必要があります。

于 2012-07-27T14:39:32.500 に答える