任何人都可以提供任何最明智的方式来制作主循环动画吗?我不想使用CCAnimation,因为我想逐帧控制动画。
我应该为数组中的每个单独的帧存储精灵矩形(相对于精灵表),然后在每个动画步骤中查找适合的矩形吗?我试图找出在CCAnimation中如何做到这一点,但我没有成功......
答案 0 :(得分:0)
正如你想要逐帧动画精灵一样,我认为使用CCSpriteBatchNode是一个更好的选择,因为它可以逐帧访问动画。使用任何工具如“Zwoptex”制作精灵的plist将提供一种有效的动画使用方法CCSpriteBatchNode。
希望您使用带有CCSpriteBatchNode的plist文件知道动画。
答案 1 :(得分:0)
不能咒骂,为什么你不想使用CCAnimation,但无论如何,为了得到你的问题的答案,你可以检查CCSprite实例的创建代码。然后,检查CCSpriteFrame实例的创建。你会在那里找到至少第一个问题的答案。
实际上,如果您只想以不同于CCAnimate的方式管理动画帧,您可以只存储CCSpriteFrames数组并根据需要显示它们(在CCAnimate操作中,这些帧只是以相等的时间间隔逐个更改)。
如果您不想显示动画的多个帧,那么您是否会使用CCSpriteBatchNode没有区别。如果你需要绘制一个纹理的几个部分,它可以节省大量的处理器时间,因为它在一次draw
调用中绘制它们而不是向所有这些精灵发送draw
消息。
答案 2 :(得分:0)
我从Morions的回答中做了以下灵感: 在游戏勾选功能中:
_animationFrames.legFrame = (_animationFrames.legFrame + 1) % _animationFrames.legFrames.count;
[_legs setDisplayFrame: [_animationFrames.legFrames objectAtIndex: _animationFrames.legFrame]];
在init函数中:
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode
batchNodeWithFile:@"Player.png"];
[self addChild:spriteSheet];
_animationFrames.legFrames = [[NSMutableArray array] retain];
for(int i = 0; i <= 15; ++i)
{
[_animationFrames.legFrames addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"Player_legs-%d.png", i]]];
}
_legs = [CCSprite spriteWithSpriteFrameName:@"Player_legs-0.png"];
[_sprite addChild: spriteSheet];
[spriteSheet addChild:_legs z:1];