0

我想开发一个简单的示例项目,其中我有一个播放器图像,我有一个通过简单 UIViewAnimation 跳跃这个播放器的逻辑现在我想让这个播放器对象运行或行走我如何通过普通 UIViewAnimation类型实现这一点不使用 cocos2D 或 OpenGL 的东西。提前感谢任何帮助。

4

3 回答 3

1

在 2d 游戏中执行此操作的经典方法是为玩家角色制作带有奔跑动画帧的 spritesheet。spritesheet 是由子图像网格组成的位图图像。每个子图像都包含一帧跑步动画。要向前播放跑步动画,您需要创建一个子图像列表以显示每个帧号。跑步动画将从第 0 帧开始并以给定的帧速率播放。您可以创建一个在每帧结束时定期触发的计时器。当计时器触发时,增加帧号。接下来使用帧号索引到子图像列表中,以选择正确的子图像以显示当前动画帧。使包含播放器图像的视图无效,并且当系统要求重绘播放器视图时,为当前动画帧绘制子图像。只要玩家在运行,运行动画就会循环重复。要循环播放动画,您必须在计时器触发时检查帧计数器的值。如果帧计数器值等于运行动画的动画帧数,则将帧计数器重置为零。然后使用帧计数器在动画的有序子图像列表中建立索引。播放器视图也必须在每次动画计时器触发时向播放器运行的方向移动。您可以通过将动画帧之间的时间乘以播放器速度来计算移动播放器视图的距离。如果帧计数器值等于运行动画的动画帧数,则将帧计数器重置为零。然后使用帧计数器在动画的有序子图像列表中建立索引。播放器视图也必须在每次动画计时器触发时向播放器运行的方向移动。您可以通过将动画帧之间的时间乘以播放器速度来计算移动播放器视图的距离。如果帧计数器值等于运行动画的动画帧数,则将帧计数器重置为零。然后使用帧计数器在动画的有序子图像列表中建立索引。播放器视图也必须在每次动画计时器触发时向播放器运行的方向移动。您可以通过将动画帧之间的时间乘以播放器速度来计算移动播放器视图的距离。

为了有效地绘制当前动画帧,将子图像存储为 NSValue 对象,其中包含 NSArray 中的 CGRect。每个 CGRect 都是在 spritesheet 中包含动画帧的子矩形。子矩形可用于从 spritesheet 中剪切动画帧,以便在将 spritesheet 绘制到播放器视图中时仅绘制一个动画帧。spritesheet 的绘制必须偏移子矩形的原点,以便动画帧的左上角与播放器视图的左上角重合。帧计数器用作从数组中查找当前动画帧的索引。

于 2012-09-20T08:16:49.443 回答
1

如果你想这样做,UIViewAnimation那么你必须创建一些图像,称为imageview 动画,你必须在其中显示每个运行图像或行走图像。这会给人一种图像正在行走或奔跑的印象。那么你就不需要 openGL 或 cocos2d。

顺便说一句,你想达到什么目标?

于 2012-09-20T07:49:10.307 回答
1

嗨,这也是一个示例项目,我希望这可以帮助您理解....

示例代码在这里

于 2012-09-20T08:23:10.027 回答