1

この2Dゲームを作成していますが、ジャンプ機能に問題があります。それは機能し、キャラクターは上下にジャンプしますが、たとえば、プラットフォームにジャンプできるように、空中にジャンプしてからキャラクターを移動できるようにしたいと思います。私はSDLKを使用しています...

case SDL_KEYDOWN:   
        switch (event.key.keysym.sym){
            RArrow = (event.button.button = SDLK_RIGHT);
            Jump = (event.button.button = SDLK_SPACE);

            if((RArrow) && (Jump))
            {
            if(g->getPlayer()->worldY = GROUND_LEVEL)
                {
                    g->getPlayer()->jump();
                    g->getPlayer()->move(10);
                }
            }
            break;

これは私が試した方法の1つです。また、ジャンプケース内でスイッチ機能を作成して、左または右にナビゲートしようとしましたが、正しくコーディングしなかったか、機能しませんでした。

4

2 に答える 2

0

私はSDLKと、これが実際のゲーム開発で実際にどのように行われるかについてよく知りません。ただし、これを実装した 1 つの方法は、各ゲーム ティックで両方のキーが押されているかどうかを確認することです。したがって、w+d を押すと、キャラクターは同時に上と右に移動します。しかし、私の意見では、それはハックな解決策です。

于 2012-11-06T22:12:22.677 に答える
0

実装がリストされていると、キャラクターは地上にいるときにのみ右に移動するように見えます. ティックごとに、ゲームがキャラクターがジャンプしているかどうかをチェックし、ジャンプしている場合は、向いている/ジャンプしている方向にキャラクターを移動するように、コードを変更する必要があります。このコードは、イベント ハンドラーの外に置く必要がある場合があります。

理想的には、キーボード イベント ハンドラーは、キャラクターがジャンプしていることとその方向を示すフラグをキャラクターに設定し、ゲーム ループで、実際にジャンプを処理する update() メソッドを呼び出します (キャラクターが床や壁などのワールド ジオメトリ)。

お役に立てれば!

編集:

コードの残りの部分を見ないと、これ以上は言えません。私はまた、これが使用していると想定しているC++も得意ではありません。これを実装する 1 つの方法は次のとおりです。

  • 「g->getPlayer()->jump()」を「g->getPlayer()->setJumping()」に置き換えます。
  • ジャンプフラグを設定するには、キャラクターに「setJumping()」を実装します。
  • ゲーム ループで、「g->getPlayer()->updatePos()」を呼び出します。
  • Character に「updatePos()」を実装して、キャラクターの位置を更新します。この中で、ジャンプ フラグを確認し、それが true の場合は、ジャンプ アルゴリズムに基づいて位置を更新します。
于 2012-11-06T22:38:04.337 に答える