,因为将反弹棒变长和缩短的代码是类似的所以我们只看一个即可,就让我们详细看看缩短的方法吧.
+(void)doStickShorterWork:(Stick *)stick{
GameScene *gameScene = [GameScene sharedGameScene];
CCPhysicsNode *physicsWorld = (CCPhysicsNode*)stick.parent;
@synchronized(gameScene){
if ([stick.name isEqualToString:@"stickShorter"]) {
return;
}
if ([stick.name isEqualToString:@"stickLonger"]) {
Stick *stickNormal = [Stick stickNormal];
stickNormal.position = stick.position;
[physicsWorld removeChild:stick cleanup:YES];
[physicsWorld addChild:stickNormal];
gameScene.stickInGameScene = stickNormal;
return;
}
}
CGPoint position = stick.position;
__block Stick *stickShorter;
@synchronized(gameScene){
stickShorter = [Stick stickShorter];
[physicsWorld removeChild:stick cleanup:YES];
stickShorter.position = position;
[physicsWorld addChild:stickShorter];
//stickShorter.visible = NO;
gameScene.stickInGameScene = stickShorter;
CCSprite *stickNode = (CCSprite*)[CCBReader load:@"Elements/StickNode"];
stickNode.position = stickShorter.position;
[gameScene addChild:stickNode z:50];
CCActionScaleTo *shorterAction = [CCActionScaleTo actionWithDuration:0.4f scaleX:0.5f scaleY:1.0f];
CCActionCallBlock *blk = [CCActionCallBlock actionWithBlock:^{
[stickNode removeFromParent];
stickShorter.visible = YES;
}];
CCActionSequence *seq = [CCActionSequence actions:shorterAction,blk,nil];
[stickNode runAction:seq];
}
[stickShorter scheduleBlock:^(CCTimer *timer){
@synchronized(gameScene){
Stick *stickNormal = [Stick stickNormal];
stickNormal.position = stickShorter.position;
[stickShorter removeFromParent];
stickShorter = nil;
[physicsWorld addChild:stickNormal];
gameScene.stickInGameScene = stickNormal;
}
} delay:10];
}
代码比较长,我们依次看一下.
首先取得gameScene和物理世界对象的实例.
如果当前stick已经是短棒了,不能再变短了,所以直接退出方法
如果当前stick是长棒,则删除stick,新建一个正常长度的stick.相当于长棒碰到变短五角星时恢复至正常尺寸,然后退出方法.
否则当前应该是正常尺寸的stick需要将其变短,具体做法为:
1.首先在原来stick位置新建一个短的stick,但将其设置为不可见,因为还要有一个变短的动画效果;
2.建立一个不带物理对象的stick节点,并执行变短的动画;
3.在动画结束时将自身删除同时将短stick设为可见.注意动画时间需要适中,既不能太长也不能过短.这个将在iOS游戏开发系列博文中详述.
4.给短的stick添加一个延时10秒调用的block,在10秒后将其删除,在原位置新建一个正常尺寸的stick.相当于10秒后恢复stick正常的尺寸.
以上就是相关的功能代码了.
编译运行App.在游戏运行时偶尔会在屏幕中产生”僵尸棒”,前面说了在物理世界中找不到该对象,更无从删除.
时间: 2024-11-18 09:20:36