HTML5/キャンバス/ゲーム プログラミングは初めてですが、数冊の本を読んだ後、いじくり回しています。私は物事がどのようにうまくいくかについてかなり良い考えを持っていると思います. この質問はいくつかの小さな質問をしますが、一般的には基本的に「構造的アプローチ」の質問です。私は冗長な応答を期待していませんが、うまくいけばあちこちに小さなポインタがあります:) スクロールしない、そして現在かなり退屈なスーパーマリオワールドへのリンクです.
注: コントロールは左/右とジャンプするためのスペースバーです。私はちょうど学習しているので、これは現在Firefox用のセットアップのみです。
この時点で何か間違ったことをしましたか?
今のところ、マリオの走り方やジャンプの仕方だけに集中していて、そこそこうまく収まったと思います。コイン ボックスは何もせず、背景は見た目のために読み込まれた画像です。これが私のアプローチです。これに完全に問題がある場合はお知らせください。
- マリオが 2 つの Y 速度 (Gravity 変数と Jump 変数) を実行してジャンプできるようにします。
- マリオが 1 つの速度 (左または右の「摩擦」 + 加速度) を実行することによって実行できるようにします。
- スプライトは、キープレス/キーダウンに従って使用および配置されます
- これが正しいかどうかはわかりませんが、コンストラクター関数を使用してオブジェクトを作成し、メインのアニメーション ループ内でそのオブジェクトのプロトタイプ.ドロー関数を呼び出して、すべての変数を更新し、オブジェクトを再描画します。
- フレームごとにキャンバス全体をクリアしています
- これを Mario.move() のような描画関数以上のものに分割する必要がありますか?
- ゲームプレイの 2 つの平面を作成するために、GroundLevel 変数と JumpLevel 変数をセットアップしました。JumpLevel は、マリオがその場でジャンプできる高さを制御できるように設定されています。この 2 つの場所により、地面が丘のように盛り上がるようになり、重力がマリオのジャンプ力を無効にするポイントを地面から同じ距離に保つことができます。
- わかりやすくするために、すべてが異なる JS ファイルに分割されていますが、明らかに統合されます。
今後:
これで、マリオの動き方の設定が完了しました (キノコの上下や火の玉の発射など、他にもいくつかの小さな操作があると思います)。私はそれを理解できると思いますが、以下を視覚化し、HTML5/Canvas でこれを簡単に処理する方法については、本当に迷っています。
背景のスクロール (Ground Tiles を設定して Screen Wrapping を使用してみましたが、タイルを反対方向に動かしていたため、多くの不均一な問題が発生しているようです。残念ながら、加速を考慮しようとしているので、これは数を捨てて、地面に隙間ができていた. 私はこのアイデアを捨てました. 大きな背景画像を持つキャンバスの下のDIVが最良の解決策でしょうか?
敵: 同じ方法で敵を作成し、各フレームですべての敵に対して衝突検出のループを実行しますか?
背景のボックス: マリオが背景のボックスの上に立つことを許可しようとしていますが、これにアプローチする方法がわかりません。現在、マリオがキャンバスにとどまるように境界を設定していますが、ボックスに基づいて異なる境界を設定するためにこれらの条件を拡張し続けますか? 画面上に複数のボックスを表示して、この方法で行うと、特に敵に対して同じヒット テストを行う場合は、ちょっとクレイジーになることがわかります。私はここで何かが欠けていることを知っています....
レベルの移動: これは多少関連しています。右キーを押すと、基本的にレベル内のすべてが左に移動する必要があります。すべてのアニメーション フレームで、マリオに触れる可能性のあるすべてのもの (マリオが立つボックスと衝突する敵) のすべての位置を追跡する必要がありますか? これはちょっと非効率になりそうですか?
ありがとうございます!結果/解決策でこれを更新し続けます:)