0

の速度値で背景をスクロールします。背景float speed = 50;上のスプライトの角度に応じてこの速度値を変更したいので、コーナーを曲がるときにスプライトが遅くなるように見えます。すべてのアクセサーとミューテーターがセットアップされましたが、スプライトの角速度に応じてバックグラウンド速度を変更する式を見つけることができません。

これが私のミューテーターです。値を与えるために使用する式は、次のように更新メソッドのすべてのティックから削除されます。

-(void) setSpeed:(float) value
{
    Speed -= value;
}

次に、実際に背景を動かすには、次を使用します。

-(void) update:(ccTime)delta
{
    if (background.position.y < background2.position.y)
    {
        background.position = ccp(background.contentSize.width / 2, background.position.y - speed * delta);
        background2.position = ccp(background.contentSize.width / 2, background.position.y + background.contentSize.height);
    }
    else
    {
        background2.position = ccp(background2.contentSize.width / 2, background2.position.y - speed * delta);
        background.position = ccp(background2.contentSize.width / 2, background2.position.y + background.contentSize.height);
    }

    //reset
    if (background.position.y <-background.contentSize.height / 2)
    {
        background.position = ccp(background.contentSize.width / 2 ,background2.position.y + background2.contentSize.height);
    } 
    else if (background2.position.y < -background2.contentSize.height / 2)
    {
        background2.position = ccp(background2.contentSize.width / 2, background.position.y + background.contentSize.height);
    }
}

何か案は?

編集:

これを行うより良い方法は、最初に速度を 50 で初期化するのではなく、プレーヤーのスプライトの回転によって生成される式で背景の速度値を完全に決定することだと思います。

4

1 に答える 1

1

数学の時間!:D

必要なのは、回転したベクトルの y 成分を見つけることです。ベクトルの大きさは速度 (速度) と同じです。

古いリマインダー: SOH-CAH-TOA!

CAH を使用します: Cosine(angleInRadians) = Adjacent / Hypotenuse ... この場合、角度は既知 (スプライトの回転)、斜辺は既知 (スプライトのシミュレートされた速度)、Adjacent は背景の y 方向の未知の速度。したがって、「隣接」について解決します...

コードに:

float spriteSpeed = 50.0;
...
float radians = -CC_DEGREES_TO_RADIANS(yourSprite.rotation);
float backgroundYSpeed = cosf(radians) * spriteSpeed;

Sine を使用して、背景を同時に水平方向にシフトすることもできます。

float backgroundXSpeed = sinf(radians) * spriteSpeed;
于 2012-07-03T23:37:31.097 に答える