Cocos2d在两个场景之间游戏ReplaceScene

时间:2013-09-16 12:11:45

标签: ios cocos2d-iphone

我建造了一个战舰游戏,玩家和计算机轮流在10X10网格上发射炸弹。

我正在使用cocos2d 2.0 for iphone。

我有两个场景,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()方法的末尾,它不起作用。

2 个答案:

答案 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

“场景与记忆:

请注意,当您将一个场景替换为另一个场景时,会加载新场景 在释放旧场景的内存之前进入内存 。“