[英]SDL C++ Jumping
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++
。 指导您完成代码的工作方式:按下:isJumping变为true,然后将播放器提升到最大高度,然后再次下降到开始的位置(此后我将添加碰撞检查)
由于下面的代码,他将转到窗口顶部:
if (jump >= jumpHeight || isFalling == true) {
jump--;
player.hitbox.y--;
isFalling = true;
}
一旦满足此条件,它将在循环的其余部分运行,并且条件永远不会为假。 要解决此问题,您需要检查递减后jump
是否为0
。 如果为0
,则将isFalling
设置为false并将isJumping
为false。
另外,请注意,增加y
,会使单位在窗口上降低,因为SDL窗口的原点从左上角开始,并且Y轴向下。
将所有y
增量替换为减量,反之亦然。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.