0

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

我正在为 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() 方法的末尾,它就不起作用。

4

2 回答 2

2

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

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

于 2013-09-16T12:37:21.710 回答
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 秒。太多了,试试你自己的价值。

以下文字摘自《Learn iPhone 5 and iPad 2 Cocos2d Game Development》一书。由史蒂芬·伊特海姆 (Steffen Itterheim) 撰写。链接:http ://www.amazon.com/Learn-cocos2d-Game-Development-iOS/dp/1430238135

“场景和记忆:

请记住,当您用另一个场景替换一个场景时,新场景会在旧场景的内存被释放之前加载到内存中。”

于 2013-09-17T21:56:04.780 回答