2015-10-18 85 views
0

我正在尝试做一个非常基本的游戏。我在移动播放器时遇到问题,因为SDL_Rect不存储浮动内容。玩家正在快速移动,所以我试图将速度提高一个十进制而不是1.所以有没有一种方法可以在不使用SDL_Rect的情况下渲染SDL我很抱歉,我对SDL很陌生。玩家代码:移动玩家围绕SDL_Rect C++

#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++; 
    } 
} 

任何批评是赞赏。

回答

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); 
} 

如果你想子像素的Percision,你需要移动到的东西比SDL_Renderer更复杂。 (OpenGL,DirectX等)

+0

谢谢!它以我想要的方式工作! – Smile