【问题标题】:SDL C++ JumpingSDL C++ 跳跃
【发布时间】:2023-03-29 06:26:01
【问题描述】:
const int jumpHeight             = 10;

//Non-Const variables
bool running                     = true;
bool isJumping                   = false;
bool isFalling                   = false;
int jump                         = 0;
Uint8 *keystate                  = NULL;

//Structs
typedef struct entity {
    SDL_Rect hitbox;
} playerType, enemyType;
playerType player;
enemyType basicEnemy[10];

//Main Function
int main( int argc, char* argv[] )
{
    while( running )
    {
            keystate = SDL_GetKeyState(NULL);
            if( keystate[SDLK_UP] )
            {
                    if(isJumping != true)
                    {
                            isJumping = true;
                    }
            }
            if( keystate[SDLK_LEFT] )  player.hitbox.x -= 1;
            if( keystate[SDLK_RIGHT] ) player.hitbox.y += 1;
            //Window collision
            if( player.hitbox.x < 0 ) {player.hitbox.x  = 0;}
            else if( player.hitbox.x > SCREEN_WIDTH  - player.hitbox.w ) {player.hitbox.x = SCREEN_WIDTH  - player.hitbox.w;}
            if( player.hitbox.y < 0 ) {player.hitbox.y  = 0;}
            else if( player.hitbox.y > SCREEN_HEIGHT - player.hitbox.h ) {player.hitbox.y = SCREEN_HEIGHT - player.hitbox.h;}

            //Jumping
            if( isJumping == true )
            {
                    if( jump >= jumpHeight || isFalling == true )
                    {
                            jump--;
                            player.hitbox.y--;
                            isFalling = true;
                    }else if( jump <= 0 && isFalling == true )
                    {
                            jump - 0;
                            isFalling = false;
                            isJumping = false;
                    }else {
                            jump++;
                            player.hitbox.y++;
                    }
            }
    }
}

这是我当前在游戏中的代码(与跳跃相关的部分)。当我按下向上键时,我的角色会走到窗口的顶部并停留在那里。我哪里出错了? 我用g++ -o myprogram.exe mysource.cpp -lmingw32 -lSDLmain -lSDL -lSDL_image -static-libgcc -static-libstdc++ 编译。 引导您了解代码应该如何工作: Press Up:isJumping变为true,然后玩家被提升到最大高度,然后再次下降到它开始的地方(稍后我会添加碰撞检查)

【问题讨论】:

    标签: c++ sdl


    【解决方案1】:

    因为这里的代码,他会走到窗口的顶部:

    if (jump >= jumpHeight || isFalling == true) {
        jump--;
        player.hitbox.y--;
        isFalling = true;
    }
    

    一旦满足此条件,它将在循环的其余部分运行,并且条件永远不会为假。要修复它,您需要在减少它之后检查jump 是否为0。如果是0,将isFalling设置为false,isJumping设置为false。

    另外,请注意,当您增加 y 时,您会使窗口上的单位降低,因为 SDL 窗口的原点从左上角开始,Y 轴向下。

    y 的所有增量替换为减量,反之亦然。

    【讨论】:

    • 对于 y 值,我最初确实是这样的,但出于某种奇怪的原因,它要求我按原样放置。当我实施您的修复时,我将它们恢复到原来的方式并且它起作用了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多