在2d游戏中控制玩家的更好方法是什么?(sdl2)

The better way to control player in 2d game ? (sdl2)

本文关键字:是什么 方法 sdl2 更好 游戏 2d 控制 玩家      更新时间:2024-09-22

我这样做,在.hpp文件中:

class Player
{
public:
Player(){}
Player(){}
virtual ~Player(){}
void handler(SDL_Event event);
void update()
{
move(velocityForwardX, velocityForwardY); 
move(-velocityBackwardX, -velocityBackwardY);
/* the player moves from it current position. */
}
protected:
int speed = 5;
int velocityForwardX = 0;
int velocityForwardY = 0;
int velocityBackwardX = 0;
int velocityBackwardY = 0;
};

在.cpp文件中:

#include "Player.h"
void Player::handler(SDL_Event event)
{
if(event.type == SDL_KEYDOWN){
switch(event.key.keysym.sym)
{
case SDLK_d:
velocityForwardX = speed;
break;
case SDLK_q:
velocityBackwardX = speed;
break;
case SDLK_z:
velocityBackwardY = speed;
break;
case SDLK_s:
velocityForwardY = speed;
break;
default:
break;
}
}
else if(event.type == SDL_KEYUP){
switch(event.key.keysym.sym)
{
case SDLK_d:
velocityForwardX = 0;
break;
case SDLK_q:
velocityBackwardX = 0;
break;
case SDLK_z:
velocityBackwardY = 0;
break;
case SDLK_s:
velocityForwardY = 0;
break;
default:
break;
}
}}

像这样,我可以按下任何一个键,然后松开它,玩家就能很好地移动。如果按下两个相反的键,然后松开其中一个,这样玩家就可以朝着正确的方向前进,这也是有效的。我们能让它更容易吗?(对不起我的英语(

按下和释放按钮时,每个方向只能存储一个变量,并添加和减去speed,例如

switch(event.key.keysym.sym)
{
case SDLK_d:
velocityX += speed;
break;
case SDLK_q:
velocityX -= speed;
break;
case SDLK_z:
velocityY -= speed;
break;
case SDLK_s:
velocityY += speed;
break;
default:
break;
}
// similar for key release

如果同时按相反的x方向键,则velocityX将为0,y方向和velocityY也是如此。