简体   繁体   English

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

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

I'm doing this like this, in .hpp file:我在 .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;

};

in .cpp file:在 .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;
    }
}}

like this I can presse any key and release it and the player move well.像这样我可以按下任意键然后松开它,玩家移动得很好。 It also works if two opposite keys are pressed then one is release so the player is going in the right direction.如果按下两个相反的键然后释放一个键,它也可以工作,这样玩家就会朝着正确的方向前进。 Can we make it easier ?我们可以让它更容易吗? (sorry for my english) (对不起我的英语不好)

You could store only one variable per direction and add and subtract speed when pressing and releasing a button, eg您可以在每个方向仅存储一个变量,并在按下和释放按钮时加减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

With this if you press opposite x direction keys simultaniously, velocityX will be 0 , and the same for the y direction and velocityY .有了这个,如果您同时按下相反的 x 方向键,则velocityX X 将为0 ,并且 y 方向和velocityY Y 相同。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM