我使用默认的新游戏项目制作了一个游戏,然后插入了一个普通的UIView作为应用介绍场景。从那时起,我就将介绍内容“升级”为使用SKScene,并带有将原始gameViewController推入堆栈的按钮。加载游戏视图后,似乎有些迟钝,所以我认为这与拥有2个完整的场景和视图控制器的开销有关。我什至将着陆场景设置为暂停,但是显然它将仍然使用内存!
我的问题是,如何使用SKScene作为登陆页面(具有其自己的LandingViewController),然后有效地将GameViewController添加到堆栈中。我尝试过合并2个视图控制器,但这似乎是一种愚蠢的事情。
当前设置:
LandingViewController
|-LandingScene
GameViewController
|- GameViewScene
|- Other Game Classes
应用程式会在LandingViewController进入,后者会启动LandingScene(和着陆UI Sprites)。LandingViewController处理诸如按钮之类的触摸事件。点击新游戏时,会推入GameViewController(当前使用Segue),然后GameViewController会启动其场景,游戏状态,UI,游戏板等。GameViewController会为其场景处理其触摸事件。游戏结束时(单击结束游戏或游戏结束状态),将弹出GameViewController。
LandingViewController和GameViewController均控制其动画和点击等的流程,因此GameViewController可以执行游戏逻辑,例如下一回合结束游戏等。我想做任何正确的事情,将对任何帮助或指针都表示赞赏!
具有单个视图控制器和多个场景
您可以使用单视图控制器(这实际上是SpriteKit游戏模板的默认状态)并具有多个场景。
因此,您将拥有GameViewController
和LandingScene
,GameScene
还有其他一些场景,例如LevelSelect
场景之类的东西。
在中GameViewController
,您是第一次初始化场景。这就是初始化您LandingScene
的地方(我想那是您实现导航菜单的地方)。
因此,SKView's
从那时起,您可以使用presentScene:方法(并可以选择使用SKTransition
类)从任何想要的场景进行过渡。
过渡中
过渡SpriteKit
通常可以通过两种不同的方式完成:
1.有些人可能会告诉您,从当前场景过渡到下一个场景是“错误的设计”,并且当前场景应通知视图控制器其已准备好过渡的状态,以便视图控制器可以执行需要过渡。但是,为此,以下是来自引文的引文:
在两个场景之间过渡
通常,您会根据游戏玩法或用户输入切换到新场景。例如,如果用户在主菜单场景中按下按钮,则您可能会过渡到新场景以配置玩家想要玩的比赛。
和相关代码:
- (void)mouseUp:(NSEvent *)theEvent
{
[self runAction: self.buttonPressAnimation];
SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0];
GameConfigScene *newScene = [[GameConfigScene alloc] initWithSize: CGSizeMake(1024,768)]];
[self.scene.view presentScene: newScene transition: reveal];
}
可以清楚地看到,到下一场景的转换是在当前场景内完成的。
2.使用上述使用委托模式的方法,其中场景将过渡的责任委托给视图控制器。
两种方法都很好,第一种方法是使用IMO方便一些,并且被广泛使用。这样便可以轻松地在不同场景之间导航SpriteKit
。
暗示:
在开发阶段,不要忘记重写场景的方法dealloc
(或者deinit
如果使用Swift的话),以确保正确释放所有场景。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句