0

ユーザーがキーボードを押したときに描画されるテクスチャを変更する方法の例を誰かに教えてもらえますか?

基本的に私は5つのスプライト画像を持っていますstood still, up, down,leftright

私の最初の試みは、更新メソッドでブール条件を作成することでした。たとえばkeys.left、長方形が左に移動し、描画メソッドが左に移動するキャラクターを描画する場合、私の問題は、彼のテクスチャがstood still消えず、別の場所に移動すると同じように重なることです方向。

私はelseステートメントなどを試しましたが、基本的な動きに固執しています。

4

1 に答える 1

1

これは非常に疑似的なコードですが、これはそれを行うための基本的なアプローチです

まず、プレーヤーに関するすべての情報を含むクラスを作成します。ヘルス、スコアなども追加できます。

class Player
{
    Texture2D Sprite;
    Vector2 Position;
    Vector2 Velocity;
    static const float PlayerSpeed = 5;
}

ここで重要なのは、Position (スプライトの左上)、Velocity (1 秒ごとの変化量)、および使用したいテクスチャである Sprite です。もちろん、プレーヤー テクスチャを 1 つだけ使用し、それに応じてソース rect を変更する方がよいでしょう。

次に、入力処理です。

void OnKeyboard(GameTime aGameTime, KeyArg aKey)
{
    if(aKey == Keys.Left)
    {
        mPlayer.Velocity = new Vector2(-Player.PlayerSpeed, 0);
        mPlayer.Sprite = TextureManager.GetTexture("left_player");
    }
    else if(aKey == Keys.Right)
    {
        mPlayer.Velocity = new Vector2(Player.PlayerSpeed, 0);
        mPlayer.Sprite = TextureManager.GetTexture("right_player");
    }

    mPlayer.Position += aGameTime.EllapsedMiliseconds * mPlayer.Velocity;
}

ここでは、どのキーが押されたかを確認し、速度を変更して、プレーヤーの現在のスプライトを変更するだけです。最後の行は最も重要なものです。これは、フレームの経過時間によって変更された速度を使用してプレーヤーの位置を変更します。そうすれば、フレームレートの不一致にもかかわらず、代わりに安定した動きが得られます.

void Render()
{
    Sprite.Draw(mPlayer.Sprite, mPlayer.Position);
}

最後にレンダリング、スプライトのレンダリング方法を明確にする必要があります。ここでは、設定したスプライトと位置を使用するだけです。テクスチャ スイッチの最小化、アルファ付きスプライトの処理、キーボードの最も重要な適切な処理など、改善の余地はたくさんあります。位置を着実に調整する必要がありますが、実装方法によっては、移動がキーのリピート レートにバインドされ、望ましくない場合があります。

于 2012-12-03T15:59:44.143 に答える