我在精灵表上有一个5帧运行动画。我想给这个角色多次升级"如太阳镜,帽子等。我不知道"正确的方式"这样做,所以我做了什么:
我构建了一个层来表示精灵本身,然后首先添加角色,然后添加帽子。我有一个5帧动画,用于帽子将在精灵表上的字符头上,并使用与主角完全相同的参数设置动画。
问题在于,当我尝试同时为两个精灵(角色精灵和帽子精灵)设置动画时,它们会失去同步。有时它效果很好,但有时时间只是一点距离,这足以让他的头部穿过帽子的顶部,或者帽子会在每一步都从头上掉下来。
我目前的解决方案是更新刻度,并在每次经过几毫秒后手动循环帧,这是有效的,但我认为,因为我手动设置它使用的帧处理器时间超过了所需的时间。
那么"正确"将帽子添加到精灵中的方法,而不必使用"帽子精灵"你的精灵表上的系列,并让它们一起动画。
编辑:对不起,这标记很糟糕,我显然没有足够的声誉来标记这个" cocos2dx",尽管事实上它是cocos2dx问题。
答案 0 :(得分:1)
好吧,如果我有相同的情况,我将根据角色的升级采取不同的spritesheets为不同的动画,这样就不需要两个不同的动画插件你可以调整精灵以获得最佳效果,它赢了&#39与其他动画进行交互,唯一的问题是你必须根据升级制作不同的精灵。
答案 1 :(得分:1)
您使用的是哪种动画?
我建议你使用骨架动画。这种方式很容易用不同的精灵替换任何身体部位。在TestCpp中,您可以使用CocoStudio(免费)或Spine(付费)获得骨架动画的一些示例。你甚至有一个动画的例子,其中武器被替换。
如果您需要坚持使用标准帧动画,则需要确保在替换任何内容时两个动画都从同一帧开始。否则,如果您在不同于0的关键帧上更换帽子,则动画将不同步。一种解决方案是重新启动两个动画。另一种方法是检查身体动画的当前帧并强制帽子动画在该帧开始。
答案 2 :(得分:1)
好的,所以我最终要做的是,所有组装一个更大的角色对象的精灵都被放在一个类中,还有一个浮动" _lastFrameUpdateTick"和int" _lastFrameNumber"。在我的更新(dt)中,我在每个精灵的_lastFrameNumber上有一个切换案例,因此它知道当前时间滴答是否超过_lastFrameUpdateTick +该帧的显示时间,它应该将该类中的所有精灵更新到下一个帧号(也允许我手动转移精灵相对位置,例如,一个角色在马背上上下弹跳)。这确实要求我在每个动画的精灵表上重复放置任何帽子的副本(虽然这可能是用plist伪造的,如此倾向)。这还有一个额外的好处,即允许某些帧显示比其他帧稍长或更短,允许根据事件明确地在动画序列中跳过(如果有地震并且角色位于一个倾斜的部分上)动画它倒退;如果它在动画的倾斜向前框架上它向前倾倒),并且它容易停止动画,同时允许其他东西继续运行。最重要的是,手动操作让我总能确切地知道精灵在哪个帧上,因此它可以平滑地在动画之间转换而不会出现打嗝(我知道如果我倾斜并想要向前跑,我需要首先看一个前倾动画。)
我确定有更好的方法可以做到这一点,但我不是C ++开发人员,而且它有效,所以我继续前进。