菜鸟动画问题解决

COCOS2D对OpenGL进行得封装
今天一个菜鸟说:后面触发一个事件之后 又要播放一次
如果不删除之前的 会出现重叠的效果代码如下:
播放代码

-(void) TrafficShipAnimation
{
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"trafficshipwin.plist"];
CCSpriteBatchNode *spritebn = [CCSpriteBatchNode batchNodeWithFile:@"trafficshipwin.png"];
[self addChild:spritebn z:3];
NSMutableArray *ATFrames = [NSMutableArray array];
for (int i =1; i<=7; i++) {

[ATFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache]
spriteFrameByName:[NSString stringWithFormat:@"WJC3_fenlei2_yunshuchuan%d.png", i]]];
}
CCAnimation *ATAnimate = [CCAnimation animationWithFrames:ATFrames delay:0.2];
sprite_traffic= [CCSprite spriteWithSpriteFrameName:@"WJC3_fenlei2_yunshuchuan1.png"];
sprite_traffic.position = ccp(43+186/2,768-190-248/2);
[spritebn addChild:sprite_traffic z:3];

seq_traffic= [CCSequence actions:[CCAnimate actionWithAnimation:ATAnimate restoreOriginalFrame:NO],nil];
[sprite_traffic runAction:seq_traffic];
}

以下是对话

A:事件触发之后直接调用的TrafficShipAnimation?没有stop

sprite_traffic.stopAllActions;
[self TrafficShipAnimation];

菜鸟:事件触发代码
sprite_traffic.stopAllActions;
[self TrafficShipAnimation];
-(void) WinAnimation
{
sprite_traffic.stopAllActions;
[self TrafficShipAnimation];
}

A:
sprite_traffic.stopAllActions???你确定调用了那个方法了么.你是OC

[sprite_traffic stopAllActions]

另外,你的代码每次调用那个方法都会额外创建一个 CCSpriteBatchNode *spritebn = [CCSpriteBatchNode batchNodeWithFile:@"trafficshipwin.png"];
[self addChild:spritebn z:3];

和重新alloc一个sprite_traffic

这样不好,成员本来就应该保持alloc一次最好

菜鸟:那该怎样写呢

A:sprite_traffic的创建放到外面,或者初始化这个类的时候

还有那个batchnode

那个方法仅仅创建一个动画,重设sprite_traffic初始状态,然后run

如果你这个动画很平凡的话,你这个动画对象都可以当成成员

不用每次都创建,这样很浪费资源

我分享一断代码给你学习:

void runAnimation()
{
#define kCCMove_Time 3
#define kCCMove_End ccp(200,200)
#define kCCMove_Begin ccp(0,0)
CCMoveTo *mv = CCMoveTo::create(kCCMove_Time,kCCMove_End);
sprite -> stopAllActions();
sprite -> setPosition(kCCMove_Begin);
sprite -> runAction(mv);
}
//我没用帧动画和batchnode渲染
//原理一样
void runAnimation()
{
#define kCCMove_Time 3
#define kCCMove_End ccp(200,200)
#define kCCMove_Begin ccp(0,0)
CCMoveTo *mv = CCMoveTo::create(kCCMove_Time,kCCMove_End);
sprite -> stopAllActions(); //停掉动画
sprite -> setPosition(kCCMove_Begin); //重置状态
sprite -> runAction(mv); //run
}
//不要吧成员的创建放进这里面
//成员的创建应该在构造函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值