2013-09-16 215 views
0

我制作了一个战舰游戏,玩家和计算机轮流在10X10格子上发射炸弹。Cocos2d游戏两个场景之间的替换场景

我对iPhone使用cocos2d 2.0。

我有两个场景,PlayerSceneAIScene

在Playerscene.m,我用

[[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInR transitionWithDuration:1.0 scene:[AIScene sceneWithPositions:otherpos andHits:otherhits andOtherPositions: rects andOtherHits: prev]]]; 

玩家选择了位置后,推进到AIScene。

这个效果很好。

然而,在AIScene,我采用的是

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[CombatScene sceneWithParameters:OtherPositions andHits:OtherHits andOtherPositions: Positions andOtherHits: Hits]]]; 

回去,这是行不通的。游戏保持在AIScene。

但是,我能够触摸屏幕,游戏将闪光我PlayerScene与我刚刚放置的炸弹,并返回到AIScene

出了什么问题?

最新信息:我在AIscene中添加了一个按钮来触发replaceScene事件,它的工作原理。但是,如果我将它添加到onEnter()方法的末尾,它不起作用。

+0

你确定你需要场景替换吗?在这种情况下似乎很奇怪。 – Morion

回答

1

采取这一代码出来的OnEnter方法,创建一个定时器或类似的东西,例如把这个进入的OnEnter方法:在AIScene

[self performSelector:@selector(replaceSceneAfterDelay:)withObject:nil afterDelay:3.0]; 

,仍然,创建方法:

-(void)replaceSceneAfterDelay 
{ 
    [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[CombatScene sceneWithParameters:OtherPositions andHits:OtherHits andOtherPositions: Positions andOtherHits: Hits]]]; 
} 

请注意3秒。太方便了,试试你自己的价值。

以下文字摘自“学习iPhone 5和iPad 2 Cocos2d游戏开发”一书。由Steffen Itterheim撰写。 链接:http://www.amazon.com/Learn-cocos2d-Game-Development-iOS/dp/1430238135

“场景和记忆:

请记住,当你与另一个替换一个场景,新场景被载入 到内存中的旧场景的内存被释放之前。”

2

您不能在onEnter方法(也不是init方法)中替换场景。换句话说,你不能从当前仍在替换另一场景的场景中调用replaceScene。

您可以安排一次选择器,然后从计划选择器调用replaceScene。只有在场景被替换之后,这种替换才会发生。