• ベストアンサー

マリオのような「斜めジャンプ」はどうすれば・・・

キーボードの「↑」「→」「←」「↓」に対応してキャラクターを移動したいのですが、うまくいきません。 37~40のうちどれかが対応したときに、それぞれの関数が呼び出されるようにしたのですが、それだと、動きが カクカク になってしまいます。 例えば、→を押しながら↑を押すと/(ななめ)の方向にスムーズに動かすにはどうすればよろしいでしょうか? 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • m035
  • ベストアンサー率44% (38/86)
回答No.2

>→を押しながら↑をおした時にやはり動きが一瞬止まって斜めに行かず、↑に行きます。 >また、静止状態から↑↓←→のいずれかを押しても、一瞬止まってからその方向にスムーズに動きます。 移動用関数の呼び出しの間隔を短くすればおそらく解決します。 各キーのスイッチはイベント呼び出しですので時間的なラグは発生しにくいです。 あとはどうにもならないことですが、複数のキー入力がほぼ同時に起こると反応しない場合があるようです。 これはあまり起こりませんが・・・。 それとおすすめのサイトは以下です。 http://www.openspc2.org/ ここはよく使います。例文やリファレンスがありますし、リファレンスはDLできます。 http://www.tohoho-web.com/js/index.htm 使いやすいリファレンスのページ(とほほのWWW内)。 http://allabout.co.jp/computer/hpcreate/subject/msub_jskouza.htm JavaScript記述講座、JavaScriptサンプル集、JavaScriptの小技集と言ったリンク集があります。有名なところはほぼカバーされていてかなり使えます。 http://jsgt.org/mt/01/ 有名な方の日記。JavaScriptのhotな情報ならここ。 http://www.parkcity.ne.jp/~chaichan/src/2ndthema.htm http://www.tokumaru.org/JavaScript/ はちょっと上級かも。 http://homepage3.nifty.com/aya_js/ は興味深い内容(forループの書き方による処理時間の違いなど)があります。 以上。ちょっと書きすぎました。 ですが、これぐらい一読すると結構な力が付きます。 ゲーム製作にも基礎的な知識が欠かせませんのでがんばってください。

Hypocrite_k
質問者

お礼

このようなすばらしいサイトを紹介していただき本当に感謝しています! 頑張ってゲーム製作に励みます!

その他の回答 (1)

  • m035
  • ベストアンサー率44% (38/86)
回答No.1

タイマーで移動用関数を常に動かしておきます。 左右上下それぞれのスイッチ用の変数を0で初期化しておきます。 onkeydownでキーの判定関数を呼び出し、押されたキーのスイッチ用の変数をたとえば1にします。 onkeyupで同様に押されたキーのスイッチが0になるようにします。 移動用関数内で、左右上下それぞれのスイッチ用の変数が1かどうか判定して 各方向に移動させます。 if(up==1)y--; if(down==1)y++; if(left==1)x--; if(right==1)x++; のように。 たとえば→を押しながら↑を押すと、→と↑のスイッチが1になっています。 よってy--とx++が実行され、斜めに移動できます。 離れたところで移動は止まります。 でも、これだとどこまでもジャンプできるので、カウンタ(仮にcnt=0)を用意して if(up==1){ if(cnt==0){//着地していればジャンプ可能 cnt=50;//cnt=(ジャンプする高さ)/(一回のyの移動量)*2 } else if(cnt>0){//ジャンプ中 cnt--; if(cnt>25){//ジャンプ頂点までは上へ y--; } else{//頂点からは下へ y++; } } } この場合は移動用関数が呼び出されたときに25回(頂点)までは上昇、その後50回まで下降します。 本当にスムーズ(というかリアル)にしたければ、xとyの足し引きする数値を変化させ、放物線のように山なりに動くようにしなければならないです。 と、言っても本格的な計算まではいらないです。 yの移動量はだんだん減り、いずれ増えていく(上記の場合)。 また、xの移動量は一定値まで微妙に増えて、いずれ減る。 ・・・これだけでなかなかよい動きをすると思います。

Hypocrite_k
質問者

お礼

回答ありがとうございます! さっそく試してみます! こんなに詳しく教えていただき本当に感謝しています!

Hypocrite_k
質問者

補足

→を押しながら↑をおした時にやはり動きが一瞬止まって斜めに行かず、↑に行きます。 また、静止状態から↑↓←→のいずれかを押しても、一瞬止まってからその方向にスムーズに動きます。 少し私にはこの課題は難しすぎたかもしれません。 本屋に行って立ち読みしてきます。 もし、JavaScriptに関する情報が満載なサイトなど知っていましたら、教えてください。 お願いします。

関連するQ&A