移动播放器 SDL_Rect c++
Moving Player Around SDL_Rect c++
我正在尝试制作一款非常基础的游戏。我在移动播放器时遇到问题,因为 SDL_Rect 不存储浮点数。播放器正在快速移动,所以我试图将速度提高到小数点而不是 1。那么有没有一种方法可以在不使用 SDL_Rect 的情况下在 sdl 中进行渲染,对不起,我是 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++;
}
}
不胜感激。
您始终可以将位置存储在 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 等)
我正在尝试制作一款非常基础的游戏。我在移动播放器时遇到问题,因为 SDL_Rect 不存储浮点数。播放器正在快速移动,所以我试图将速度提高到小数点而不是 1。那么有没有一种方法可以在不使用 SDL_Rect 的情况下在 sdl 中进行渲染,对不起,我是 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++;
}
}
不胜感激。
您始终可以将位置存储在 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 等)