Странное поведение замечено c ++ sdl2 - PullRequest
0 голосов
/ 07 июня 2019

Используя 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 голосов
/ 07 июня 2019

как @ keltar рекомендовал, что это происходит, потому что при int + (float <0) </em> int остается тем же, потому что он конвертируетрезультат (100.3) от float до int (100) (то есть, потому что одно из значений - int), поэтому позиция x останется прежней, если вы не установите скорость int или большечем 0.

...