0

C++ を使用して、非常に基本的なプラットフォーム/スプライトの動作を実装しようとしています。

これまでのところ、2 つのプラットフォームと、移動およびジャンプできるスプライトのレンダリングに成功しています。以下は、ジャンプと重力をシミュレートするコードのスニペットです。

「//gravity」とコメントされたスニペットの行をコメントアウトする2,3, & 6と、プラットフォームを下から完全にジャンプすることはできませんが、着陸することはできません...下のままにしておくと、(check_collision関数)、私はうまくジャンプしてプラットフォームに乗り、それに沿って左右に移動できます。残念ながら、もう一度ジャンプ ( key119) を押すと、プラットフォームから落ちて、別のジャンプを行う代わりに、プラットフォームの下に固執することさえあります。

スプライトが別のジャンプを実行できるようにするために、何を実装するのを忘れていますか?

    if(keyDown[119]){                                               //While 'w' key is pressed and not colliding
        if(!check_collision(sprite,platform)                        //If not colliding...
            && !check_collision(sprite,platform2)){
            y_Pos += jumpHeight;                                    //Jump up
            if(keyDown[97] ){x_Pos -= velocity*jumpLength;}         //While 'w' and 'a' are pressed, simulate arc of jump/gravity
            if(keyDown[100]){x_Pos += velocity*jumpLength;}         //While 'w' and 'd' are pressed, simulate arc of jump/gravity
        }
        else                                                        //Else you must be colliding, bounce off
            y_Pos -= jumpHeight;
    }
    if(keyDown[115]){y_Pos -= velocity;}                            //While 's' key is pressed
    if(keyDown[97] ){x_Pos -= velocity;}                            //While 'a' key is pressed
    if(keyDown[100]){x_Pos += velocity;}                            //While 'd' key is pressed

    //gravity
    if(y_Pos>0){                                                    //If above ground
        if(!check_collision(sprite,platform)                        //And not colliding
            && !check_collision(sprite,platform2)){
            gravity-=5*delta;                                       //Calculate gravity force
            y_Pos+=gravity;                                         //Descend to ground
        }
        if(keyDown[97] ){x_Pos -= velocity*2;}                      //While off ground, whilst 'a' is pressed, move left
        if(keyDown[100]){x_Pos += velocity*2;}                      //While off ground, whilst 'd' is pressed, move right
    }
    else{gravity=0;}                                                //Else, on ground, so gravity force is zero

私の素朴さを許して、辛抱強く待ってください。私は自己学習しており、私たちは皆どこかから始めなければなりません。ありがとう。

プログラム全体を掲載するにはコードが多すぎますが、興味がある場合は、ここで完全なソース コードを見つけることができます。

4

0 に答える 0