私は単純なゲームを作っています。私は私のキャラクターを矢印キーと火で動かすことができました。私はマップにピクチャボックスであるいくつかの壁を追加しました。私はこのような衝突を検出することができた:衝突の検出と停止の動き
private void timer6_Tick(object sender, EventArgs e){
foreach (PictureBox pic in brick){
if (pic.Bounds.IntersectsWith(pb_sprite.Bounds)){
Console.WriteLine("Colision!");
switch (rotation){
case "up":
canup = false;
candown = true;
canleft = true;
canright = true;
break;
case "down":
canup = true;
candown = false;
canleft = true;
canright = true;
break;
case "left":
candown = true;
canup = true;
canleft = false;
canright = true;
break;
case "right":
candown = true;
canup = true;
canleft = true;
canright = false;
break;
}
}
else
{
Console.WriteLine("No colision?!");
}
}
}
これは期待どおりに動作するが、すぐに私はオブジェクト(壁)に当たって "Colision"を得る。エコーはOKですが、これはまた、衝突が発生したときにキャラクターが向いていた方向への移動を停止します。事は、私がこれらのboolのうちの1つを偽のままにして、私のキャラクターが同じ方向に再び動くのを妨げる衝突を終了するときです。私は他のブランチではtrueに設定しようとしましたが、衝突があっても5つの壁があるので他のブランチは5から4回実行されます。一瞬に襲われる
あなたは、あなたの 'Timer'内部ではなく、ワン持っていて、衝突を検出した場合、あなたは-assumingあなた' movement'機能上の衝突を確認することができますその動きを許さない。 – uTeisT
別のアプローチを考えてみましょう。ユーザーが*コマンド*を入力します。ゲーム*の文脈でコマンドを評価すると、コマンドは* approved *または* denied *のいずれかになります。承認された場合、文字は示された方向に移動します。拒否された場合、何も起こりません。私はあなたがこのパターンを使ってあなたのゲームを構造化すれば、あなたの問題の多くはなくなると思います。 –