我建造了一个战舰游戏,玩家和计算机轮流在10X10网格上发射炸弹。
我正在使用cocos2d 2.0 for iphone。
我有两个场景,PlayerScene
和AIScene
。
在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 :(得分:2)
你不能在onEnter方法(也不是init方法)中替换theScene。换句话说,您无法从当前仍在替换另一个场景的场景中调用replaceScene。
您可以安排一次选择器,然后从预定选择器调用replaceScene。这种方式只有在场景被替换后才会发生替换。
答案 1 :(得分:1)
从onEnter方法中取出该代码,创建一个计时器或类似的东西,例如将其放入onEnter方法:
[self performSelector:@selector(replaceSceneAfterDelay:)withObject:nil afterDelay:3.0];
仍然在AIScene中,创建方法:
-(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
“场景与记忆:
请注意,当您将一个场景替换为另一个场景时,会加载新场景 在释放旧场景的内存之前进入内存 。“