【发布时间】:2019-06-07 21:09:33
【问题描述】:
使用 sdl2,我设法为游戏构建了“即将成为意大利面”的类。然而,当涉及到使用类的函数时,我偶然发现了这种奇怪之处。
class Player{
public:
Player();
const SDL_Rect *getPositionPtr() const { return &position; }
const SDL_Rect * getClip(){ return &clip; }
void eventHandle(SDL_Event & e);
void move();
private:
SDL_Rect position;
SDL_Rect clip;
float velocity;
bool leftkeydown;
bool rightkeydown;
};
Player::Player(){
position = {100, 300, 64, 64};
clip = {0, 0, 64, 64};
velocity = 0.3;
leftkeydown = false;
rightkeydown = false;
}
void Player::eventHandle(SDL_Event & e){
if( e.type == SDL_KEYDOWN && e.key.repeat == 0 ){
switch( e.key.keysym.sym ){
case SDLK_a:
leftkeydown = true;
break;
case SDLK_d:
rightkeydown = true;
break;
}
}
else if( e.type == SDL_KEYUP && e.key.repeat == 0 ){
//Adjust the velocity
switch( e.key.keysym.sym ){
case SDLK_a:
leftkeydown = false;
break;
case SDLK_d:
rightkeydown = false;
break;
}
}
}
void Player::move(){
if(leftkeydown) position.x -= velocity;
if(rightkeydown) position.x += velocity; // <----- problem here
}
leftkeydown 似乎按预期工作,但 rightkeydown 对 position.x 变量没有任何作用。
任何想法为什么它不增加?
【问题讨论】:
-
你是如何测试这个的?您是否确保至多
leftkeydown和rightkeydown之一在任何给定点为真? -
你的速度是 0.3,
position是SDL_Rect,由四个整数组成。100 - 0.3是 99,但100 + 0.3仍然是 100。