C++ 在2d游戏中控制玩家的更好方法?(sdl2)
我是这样做的,在.hpp文件中:C++ 在2d游戏中控制玩家的更好方法?(sdl2),c++,controls,sdl-2,C++,Controls,Sdl 2,我是这样做的,在.hpp文件中: class Player { public: Player(){} Player(){} virtual ~Player(){} void handler(SDL_Event event); void update() { move(velocityForwardX, velocityForwardY); move(-velocityBackwardX, -velocityBac
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;
}
}}
像这样,我可以按下任何键并释放它,玩家移动自如。如果按下两个相反的键,然后松开其中一个键,则该功能也会起作用,以便播放器朝正确的方向移动。我们能让它更容易些吗?(对不起,我说的是英语)在按下和释放按钮时,每个方向只能存储一个变量,并且可以对速度进行加减,例如
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
也是如此。谢谢,看起来确实更好。但是,当我同时按下几个键时,角色会自己移动,就像它检测到一个额外的释放键一样(我不知道我是否清楚)。