1

私は ios5 の cocos2d フレームワークに関する本を数日間読んでおり、その本で説明する小さなゲームを開発しました。このゲームでスプライトを制御するには、加速度計を使用します。

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{

    float deceleration = 0.4f;
    float sensitivity = 6.0f;
    float maxVelocity = 100;

    // adjust velocity based on current accelerometer acceleration
    playerVelocity.x = playerVelocity.x * deceleration + acceleration.x * sensitivity;

    // we must limit the maximum velocity of the player sprite, in both directions (positive & negative values)
    if (playerVelocity.x > maxVelocity)
    {
        playerVelocity.x = maxVelocity;
    }
    else if (playerVelocity.x < -maxVelocity)
    {
        playerVelocity.x = -maxVelocity;
    }

    // Alternatively, the above if/else if block can be rewritten using fminf and fmaxf more neatly like so:
    // playerVelocity.x = fmaxf(fminf(playerVelocity.x, maxVelocity), -maxVelocity);
}

このコードを変更して、スプライトが x 軸に沿って加速/減速できるようにすることはできますが、加速度計ではなくタッチ入力を使用し、タッチが長く押されているほど速くなるようにするにはどうすればよいでしょうか? したがって、右にタッチすると、スプライトはゆっくりとその場所に移動し、タッチを放すと、その場所への移動が停止します。タッチを長押しするほど、スプライトの動きが速くなります。

フレームワークには、スプライトがタッチされた位置に回転できるようにする回転メカニズムを実装できるものがあるので、タッチされたポイントに面しているように見えますか?

4

1 に答える 1

1

確かに、タッチに対する角度を決定し、それに応じてスプライトを回転させる方法はありませんが、スプライトとタッチの x 座標と y 座標があれば、かなり簡単に自分で計算できます。

CGPoint spriteCenter; // this should represent the center position of the sprite
CGPoint touchPoint; //location of touch

float distanceX = touchPoint.x - spriteCenter.x;
float distanceY = touchPoint.y - spriteCenter.y;

float angle = atan2f(distanceY,distanceX); // returns angle in radians

// do whatever you need to with the angle

角度を取得したら、スプライトの回転を設定できます。

于 2012-06-18T03:09:49.483 に答える