gpt4 book ai didi

c++ - SDL C++ 跳跃

转载 作者:行者123 更新时间:2023-11-28 07:31:00 28 4
gpt4 key购买 nike

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,然后玩家被提升到最大高度,然后再次下降到它开始的地方(稍后我会添加碰撞检查)

最佳答案

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

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

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

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

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

关于c++ - SDL C++ 跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17714778/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com