gpt4 book ai didi

c++ - 将 SDL2 箭头/WASD 键转换为玩家移动的最佳/最可靠方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:17 25 4
gpt4 key购买 nike

我的问题是在 SDL2 中实现定向输入的最可靠方法是什么。

我当前代码的问题是说您想将播放器向左移动。按 a 会减少他的 x 值,一旦你释放 a 键,它就会停止减少 x 值。但是,如果您想向左移动然后立即向右移动,则播放器将停止一段时间,然后继续向右移动。

任何建议都会很有帮助。

我的键盘功能:

class KeyboardController : public Component {

public:
TransformComponent* transform;

void init() override {
transform = &entity->getComponent<TransformComponent>();
}

void update() override {

if (MainGame::evnt.type == SDL_KEYDOWN) {
switch (MainGame::evnt.key.keysym.sym)
{
case SDLK_w:
transform->velocity.y = -1;

break;
case SDLK_a:
transform->velocity.x = -1;

break;
case SDLK_s:
transform->velocity.y = 1;

break;
case SDLK_d:
transform->velocity.x = 1;

break;
}
}

if (MainGame::evnt.type == SDL_KEYUP) {
switch (MainGame::evnt.key.keysym.sym)
{
case SDLK_w:
transform->velocity.y = 0;

break;

case SDLK_a:
transform->velocity.x = 0;

break;

case SDLK_s:
transform->velocity.y = 0;

break;

case SDLK_d:
transform->velocity.x = 0;

break;
}
}
}
};

我的速度函数:

/* class */

Vector2D position;
Vector2D velocity;

/* other code */

void update() override {
position.x += velocity.x * speed; //speed = 3
position.y += velocity.y * speed;
}

最佳答案

与其根据事件立即改变速度,不如考虑添加额外的状态(一个数组),它会记住在任何给定时刻按下了哪些键。每当收到输入事件时,更新数组并根据该数组重新计算速度。

例如,根据您制作的游戏,您可能希望在同时按下左右键时让玩家停止移动。或者,方向键的 keydown 事件会让玩家立即开始朝那个方向移动,但您仍然需要跟踪何时没有更多的按钮被按下,以了解玩家何时应该停止移动。

关于c++ - 将 SDL2 箭头/WASD 键转换为玩家移动的最佳/最可靠方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46514676/

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