围绕SDL_Rect c ++移动播放器

时间:2015-10-18 02:48:13

标签: c++ sdl

我正在尝试制作一款非常基本的游戏。我在移动播放器时遇到问题,因为SDL_Rect不存储浮点数。玩家正在快速移动所以我试图将速度提高十进制而不是1.所以有没有办法在sdl中渲染而不使用SDL_Rect我很抱歉我对sdl很新。球员代码:

#include "Player.h"


Player::Player() : speed(0.5)
{
    plr.w = 50;
    plr.h = 50;
    plr.x = 10;
    plr.y = 10;
}


Player::~Player()
{
}

void Player::input(int key)
{
    if (key == 0)
    {
        left = true;
    }

    if (key == 4)
    {
        left = false;
    }

}

void Player::render(SDL_Renderer* ren)
{
    SDL_SetRenderDrawColor(ren, 255, 0, 0, 255);
    SDL_RenderFillRect(ren, &plr);
}

void Player::tick()
{
    if (left)
    {
        plr.x++;
    }
}

任何批评都表示赞赏。

1 个答案:

答案 0 :(得分:0)

您始终可以将位置存储在SDL_Rect之外。

float positionX = 0.0f;

void Player::tick()
{
    if (left)
    {
        positionX += speed;
    }
}

然后,当需要渲染时,将位置四舍五入到最近的像素。

#include <math.h>

void Player::render(SDL_Renderer* ren)
{
    plr.x = (int)round(positionX);

    SDL_SetRenderDrawColor(ren, 255, 0, 0, 255);
    SDL_RenderFillRect(ren, &plr);
}

如果你想要亚像素切割,你需要转移到比SDL_Renderer更复杂的东西上。 (OpenGL,DirectX等)