0

私は最近XNAで開発を始めました。私はもっ​​と基本的なプログラミング言語を持っていると言えますが、それほど特別なことは何もありません。

XNAでの私の最初のプロジェクトとして。シンプルな2Dプラットフォーマーを作りたいのですが、今はシンプルな動きを試しています。

3つのベクトル(位置、速度、加速度)と単純な整数(最大速度)があります。

Vector2 pos = new Vector2(200, 200);
Vector2 vel = new Vector2(20, 20);
Vector2 acc = new Vector2(30, 30);
int maxVel = 50;

次に、XNAフレームワークのUpdateメソッドを取得して、スプライトを移動させる簡単なコードがあります。

// Horizontal Movement
if (KeybState.IsKeyDown(Keys.Right))
{
if (vel.X < maxVel)
vel.X += acc.X * curTime;
pos.X += vel.X * curTime;
}
if (!KeybState.IsKeyDown(Keys.Right) && vel.X > 20)
{
pos.X += vel.X * curTime;
vel.X -= 1;
}

したがって、右矢印キーを押すと、スプライトが動き始めます。速度は20から始まり、加速とゲームの経過時間の助けを借りて、maxVel(50)に増加し、右キーを離すと速度が失われます。それは完璧に動作します。

しかし、左矢印キーに対して同じことをしようとすると、pos +=代わりにpos-=を実行します。これにより、pos.X値が減少しますが、50まで増加する代わりに一定の速度(20)が使用されます。 。

なぜこれが起こっているのかを考えるほど頭が良くないと思うので、より良い開発者からの助けをいただければ幸いです。

他の場所を見たくないことに注意してください。自分のバージョンを意図したとおりに機能させたいので、正解が最適です。

4

1 に答える 1

0

あなたの状態

if (!KeybState.IsKeyDown(Keys.Right) && vel.X > 20)

右矢印が押されていないとき(左矢印が押されているときを含む)で速度が20を超えるたびにtrueになるため、コードは速度をすぐに20に戻します。

速度を下げるには、キーが押されていない(または少なくとも矢印キーが押されていない)どうかを確認する必要があります。最も簡単な方法は次のとおりです。

if (!KeybState.IsKeyDown(Keys.Right) &&
    !KeybState.IsKeyDown(Keys.Left) &&
    !KeybState.IsKeyDown(Keys.Up) &&
    !KeybState.IsKeyDown(Keys.Down) && vel.X > 20)
于 2012-04-30T11:58:43.227 に答える