Cocos2D 动画问题

Posted

技术标签:

【中文标题】Cocos2D 动画问题【英文标题】:Cocos2D Animation Problems 【发布时间】:2014-07-23 20:17:52 【问题描述】:

我正在使用 spriteBuilder 在 Cocos2D 3.1 版中制作游戏。我通过将帧列表添加到数组中并将其存储在缓存中来创建动画。当我需要运行动画时,我会从缓存中获取并在屏幕上播放。这对我的跑步动画非常有用。我有另一个动画,其中我的角色正在滑动。当我在跑步动画之后播放滑动动画时,我的角色似乎在半空中滑动,而不是与地面相交。造成这种情况的原因可能是因为帧是在运行动画之后立即加载的,因此它们与运行动画加载在同一位置。由于滑动动画的帧数小于运行动画的帧数,因此看起来玩家在漂浮。

我想知道是否有任何方法可以使框架负载降低一点,以便它们接触地面。是否只有在加载幻灯片动画时将英雄的位置向下推,然后在我想加载跑步动画时返回?

谢谢

【问题讨论】:

提示:始终为一组动画使用相同的帧大小。如果您创建精灵表,额外的透明空间将被切断。 @LearnCocos2D 我不确定我是否完全理解你的意思。当我在 Illustrator 中创建图形时,我将它们导出为具有透明背景的 PNG。我这样做有错吗? 否,但您导出的 png 文件都应该具有相同的尺寸以避免您遇到的问题 - 虽然您可以在代码中修复这个问题,该修复将是脆弱的并且根据什么框架正确应用和删除精灵当前正在显示。你不想去那里。 我还在使用 CGRectMake 为我的角色创建传感器。我的边界框与字符的大小成正比,例如 x 位置是 self.boundingbox.origin.x,高度是 self.boundingbox.size.height。所有具有相同尺寸的 png 文件不会影响传感器吗? 是的,我试过了。我的角色动画的每一帧大约是 100 x 100 像素。因此,我在 illustrator 中创建了一个 200 x 200 像素的文档并导出了 png 文件,这样每个文件现在都是 200 x 200 像素。因此,大小是相同的。显然,spritebuilder 智能 spritesheets 并没有切断额外的透明空间,因为我角色的传感器已关闭。游戏认为角色已经撞墙了,而实际上他并没有。你能告诉我如何解决这个问题吗? 【参考方案1】:

您是否在游戏中使用(或将使用)重力?如果没有力将精灵向下推,您可以在每次加载动画时将精灵的位置向下推,或者对所有动画使用相同的帧大小。

编辑: 你似乎知道框架的底部应该在哪里。在地上?因此,如果您希望在加载动画时精灵的底部位于同一位置,请将位置设置为:

sprite.position = ccp(x, theBottomY + sprite.boundingBox.size.height/2);

【讨论】:

我正在使用重力。我怎样才能对所有动画使用相同的帧大小?我将如何实现它? 我没用过精灵生成器,但是看看它是否有修剪功能。 @user2852657 我不确定。让我们假设它做到了,然后呢? @mntruell 好吧,你可以将所有的帧修剪成相同的大小,但如果你要切断部分精灵,我会在每次加载动画时更改位置。

以上是关于Cocos2D 动画问题的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewController 滚动引起的cocos2d动画暂停问题的解决

Cocos2D 弃用的动画方法

cocos2d 动画从后台返回时停止

从时间轴播放 Spritebuilder 动画 - Cocos2d

COCOS2D:CCScene 中的 ScrollView 块动画

Sprite 帧动画 Cocos2d 3.0