发现奇怪的行为C ++ SDL2

时间:2019-06-07 07:03:20

标签: c++ sdl-2

使用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变量没有任何作用。

任何想法为什么它没有增加?

1 个答案:

答案 0 :(得分:0)

@keltar 称赞它的发生是因为 int +(float <0) 结果(100.3)从 float (浮点数)到 int (100)(那是因为其中一个值是int值),因此位置x将保持不变,除非您将速度设为int或大于0。