繁体   English   中英

奇怪的行为发现c ++ sdl2

[英]Strange behavior spotted c++ sdl2

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

任何想法为什么它不增加?

正如@keltar推荐的那样,因为在int +(float <0)中 ,int保持不变,因为它将结果(100.3)从float转换int (100)(这是因为其中一个值为int)所以位置x将保持不变,除非你使速度为int或大于0。

暂无
暂无

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

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