我正在尝试制作一款非常基本的游戏。我在移动播放器时遇到问题,因为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++;
}
}
任何批评都表示赞赏。
答案 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等)