提问人:Eldinur the Kolibri 提问时间:10/15/2023 最后编辑:Eldinur the Kolibri 更新时间:10/15/2023 访问量:124
在 raylib 中创建精灵动画的最佳方法是什么?
What is the best way to create a sprite-animation in raylib?
问:
我不确定哪种方法对于创建动画最有效。raylib
基本上有两种选择:
我可以根据帧延迟更新帧。
我可以根据计时器更新帧。
第一种方法似乎不是很好,因为它不独立于 FPS。它可能在我的计算机上运行得恰到好处,而在另一台计算机上运行得非常慢或快。
第二种方法涉及用于计时器实现的繁琐样板代码。
在 raylib 示例页面上,他们到处都广泛使用 s,并更新了几帧。尽管这是一个如此基本的问题,但我根本不清楚更好的选择是什么。我也没有遇到任何好的建议。是否有任何商定的共识?至于我会使用什么,它可能是计时器,因为它不依赖于 FPS。(该函数计算上一帧之后的增量。framedelay
GetFrameTime()
一个简单的 Timer 实现如下所示:
typedef struct {
float Lifetime;
} Timer;
void startTimer(Timer *timer, float Lifetime) {
if (timer != nullptr && Lifetime > 0) {
timer->Lifetime = Lifetime;
}
}
void updateTimer(Timer *timer) {
if (timer != nullptr && timer->Lifetime > 0) {
timer->Lifetime -= GetFrameTime();
}
}
bool timerFinished(Timer *timer) {
if (timer != nullptr) {
return timer->Lifetime <= 0;
}
return false;
}
我认为这很简单,但正如我所说。这不是世界上最漂亮的东西。
答:
那么,你渴望在 raylib 中创建精灵动画吗?太棒了,让我们一步一步地分解它。
首先,准备好你的精灵表。这是包含所有动画帧的一张大图像。你可能有一个网格布局或其他一些安排 - 只要它们都在那里并不重要。
接下来,您需要使用 LoadTexture 加载精灵表。就这么简单:
Texture2D spritesheet = LoadTexture("your_spritesheet.png");
现在,让我们谈谈你的动画帧。您需要定义它们。将每一帧视为精灵表的一小块。我们将使用矩形来指定精灵表的哪个部分表示每个帧。创建一个矩形数组来执行此操作:
Rectangle frames[] = {
{ 0, 0, frameWidth, frameHeight }, // Frame 1
{ frameWidth, 0, frameWidth, frameHeight }, // Frame 2
// Add more frames as needed
};
明白了吗?非常好。
接下来,设置一些变量来控制动画 – currentFrame、frameRate 和 frameTimer。currentFrame 跟踪您在动画中的位置,frameRate 是每帧应显示的时间,frameTimer 帮助管理帧切换。以下是设置它们的方法:
int currentFrame = 0;
float frameRate = 0.1f; // Time in seconds for each frame
float frameTimer = 0.0f; // Timer to control frame switching
现在,有趣的部分!在游戏循环中,您需要通过根据时间更改当前帧来更新动画。这就像翻阅翻书的框架一样。下面是一个片段来帮助你做到这一点:
frameTimer += GetFrameTime();
if (frameTimer >= frameRate) {
frameTimer = 0.0f;
currentFrame++;
if (currentFrame >= numFrames) {
currentFrame = 0;
}
最后,要查看动画的运行情况,您必须使用 DrawTextureRec 绘制当前帧。这就像展示翻书中的幻灯片一样。这是你如何做到的:
DrawTextureRec(spritesheet, frames[currentFrame], position, WHITE);
该位置是您要将精灵放在屏幕上的位置。
别忘了自己清理。完成后,卸载资源以防止任何内存泄漏。将 UnloadTexture 用于精灵表。
这就是在 raylib 中创建精灵动画的基本纲要。请记住,您可以利用它并在此基础上构建您的特定游戏需求。享受动画!
评论