gpt4 book ai didi

iphone - 用Cocos2D制作动画有什么好方法吗?

转载 作者:行者123 更新时间:2023-12-03 19:42:50 25 4
gpt4 key购买 nike

我正在制作一个iPhone小游戏,我会得到一些线索。让我们想象一下:

两个背景 Sprite 从右向左快速移动,并随着加速度计上下移动。

我想我不能在这里使用动画,因为背景的移动会在每一帧重新计算。所以我使用间隔为 0.025 秒的时间表,并在每个时钟移动我的 Sprite :

sprite.position = ccp(x, y);

所以这是我的问题:结果很滞后,只有这两个 Sprite 。

我尝试在 header 中声明 Sprite ,并使用 CCNode 和标签获取它们。完全一样。

因此,如果有人能给我一个提示,告诉我什么是最好的方法,那就太好了。我想知道问题是否不是因为 Sprite 移动得非常快,但我不确定。

无论如何,感谢您抽出时间。

J.

最佳答案

0.025 等于 40 fps,这可能有点陡峭,具体取决于游戏循环的其余部分。最好考虑一下帧速率和感知速度之间的关系。当您提高帧速率时,您可以使运动更加平滑,但前提是您知道如何计算运动。如果您在时间的每个滴答声中将对象移动固定的距离,它们就会出现卡顿,因为计时器不精确。 (想一想:40 fps 意味着每帧 25 毫秒。当计时器关闭 5 毫秒时(不是很多,不是吗?),您将帧时间更改了 20%。时间事件获取时间并不罕见。延迟 10–20 毫秒。)

这意味着您必须计算上一帧的实时增量并根据它移动对象。有点像这样:

const int kDesiredModelFramerate = 50; // fps
const double kDesiredFrameTime = 1.0/kDesiredModelFramerate;

double now = CFAbsoluteTimeGetCurrent();
double delta = now - lastFrameTime;
double correction = delta/kDesiredFrameTime;
[object setX:object.x + step*correction];

这看起来很复杂,但事实并非如此。当距离最后一帧花了 40 毫秒时,您就知道自己“晚了”一帧,因为为了保持所需的 50 fps 帧速率,您希望将每一帧保持在 20 毫秒以下。因此correction将为 0.04/0.02 = 2,通常的移动步长将乘以 2 以弥补滞后。现在您可以根据需要更改帧速率 - 感知的运动速度将保持不变,只有运动的平滑度会改变。

<voice class="Simon Peyton Jones">那有意义吗? </voice>

有一个great article about game loops您可以在其中阅读更多详细信息。这是游戏程序员的必读之作。在 Cocos2D 中实现这一切的确切方法可能会有所不同,但要点是相同的。解决这个问题应该可以帮助您让事情顺利快速地进行。

关于iphone - 用Cocos2D制作动画有什么好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2488024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com