1

Javascipt を使用して HTML5 スネーク ゲームを構築しようとしていました。解決すべき大きな問題が 1 つ残っており、何時間も考えても解決できません。

これは、矢印キーを押したときの setInterval と蛇の動きに関係しています。矢印キーをすばやく押すと、複数のキーを押すのとほぼ同じようにゲームが終了します (ヘビが自分自身の上を走ると終了することを意味します)。

問題が説明された作業モデル: http://jsfiddle.net/MgsZp/29/

状況: スネークが下に移動しているときに、左矢印を押してから上矢印をすばやく押すと、左矢印の時間間隔が即座にクリアされるため、スネークはそれ自体の上を走ります (上にのみ移動します)。代わりに、左に移動してから上に移動する必要があります。

このような状況で押された矢印キーを配列に保存しようとしましたが、処理できませんでした。

例:

var arrowArray = [] ; /* 押された矢印キーを保存します */

// キーを押すと setInterval(move_snake, timer) が arrowArray[0] に保存されている方向に

// arrowArray.shift() は、ヘビが移動する現在の方向を削除し、arrowArray[0] の次の方向に道を譲ります

矢印キーをすばやく押したときに、ヘビが一方向に移動するまで待ってから、2 番目の方向に移動する方法を教えてください。タイマーが終了するのを待つために setTimeout 内で setInterval を使用しようとしましたが、成功しませんでした。

ヘルプ?

4

2 に答える 2

1

これを試してください: キーを押すためのハンドラーで、arrowArray.push(newDirection);各フレームで、新しい方向をオフにするか、現在の方向を使用します。そうすれば、ヘビはフレームごとに 1 回方向を変えることができます。たとえば、ヘビが下降している場合、次のフレームが来る前にユーザーが右、上、右、下に押すと、正しいことが起こります。

于 2012-07-23T17:06:05.783 に答える
1

ここにアイデアがあります: 矢印キーでインターバルをクリアして再開するのではなく、次のフレームでヘビが進む方向を矢印キーで変更する必要があります。これにより、ヘビの方向を変えるたびに発生するわずかな遅延を回避できます。矢印キーは、次の移動方向を設定するだけです。その後、間隔関数が再度実行されると、次の方向が有効かどうかがチェックされます。これにより、ヘビが反対方向に行こうとした問題が修正されます。

于 2012-07-23T17:01:53.473 に答える