2016-02-15 67 views
3

我用默认的新游戏项目做了一个游戏,然后插入了一个普通的UIView作为应用程序的介绍场景。因为'升级'了介绍,因此使用SKScene,并使用按钮将原始gameViewController推入堆栈。一旦游戏视图被加载,它似乎有点迟缓,所以我假设这是与2个完整的skscenes和视图控制器的开销。我甚至设置了着陆场景暂停,但它显然仍然使用内存!处理多个SKScenes的最佳方法是什么?

我的问题是,我如何使用SKScene作为着陆页(使用它自己的LandingViewController),然后有效地将GameViewController添加到堆栈。我试过合并2个视图控制器,但这似乎是一个愚蠢的做事方式。

当前设置:

LandingViewController 
|-LandingScene 

GameViewController 
|- GameViewScene 
|- Other Game Classes 

应用处进入LandingViewController其中inits的LandingScene(和降落UI精灵)。 LandingViewController处理触摸事件,如按钮等。当新游戏被点击时,GameViewController被推送(当前使用Segue)和GameViewController进入它的场景,游戏状态,UI,游戏板等.GameViewController处理触摸事件的场景。当游戏结束时(点击结束游戏或游戏结束状态),GameViewController弹出。

LandingViewController和GameViewController都控制着它们的动画和点击流等,所以GameViewController可以做游戏逻辑,就像下一个回合结束游戏等一样。 任何帮助或指针将不胜感激,因为我想这样做是正确的!

+0

嗯,你能指定什么是滞后于你吗?除非你不断地释放和更新资源,否则使用大量内存不会造成滞后,所以你可能还有其他的事情你不知道。 – Knight0fDragon

+0

我在GameScene上移动的精灵反应较慢并且动画较慢。这只有一次我有了2个景观的场景。我不会根据@Whirlwind – Designer023

回答

5

具有单一视图控制器和多个场景

你可以使用单一视图控制器(实际上是SpriteKit游戏模板的默认状态)并有多个场景。

所以你将有GameViewControllerLandingScene,GameScene和可能的一些其他场景,如LevelSelect场景或类似的东西。

GameViewController中,您首次初始化场景。所以这就是初始化你的LandingScene(我猜这是你实现导航菜单的地方)。

因此,从这一点开始,您可以使用SKView'spresentScene:方法(也可以选择使用SKTransition类)从您想要的任何场景进行转换。

过渡

SpriteKit转型可以用两种不同的方式一般都做:

有些人可能会告诉你,让从当前场景的转换,到下一个场景是“坏设计”,并且当前场景应该通知视图控制器关于其准备过渡状态,以便视图控制器可以进行所需的转换。但在回答的是,这些都是从报价文档:

之间转换的两个场景

通常情况下,你过渡到基于游戏或用户 输入一个新的场景。例如,如果用户按下主菜单 场景中的按钮,则可能会转换到新场景以配置玩家想要玩的比赛 。

和相关代码:

- (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)方法,而在开发阶段,以确保所有的场景都正确地释放。

+0

的建议重新修改该功能。谢谢。我将尝试重写我必须负责的UIViewcontroller,然后切换场景。我只需要根据需要将所有功能移到每个场景中。 – Designer023

+0

好吧,所以我选择了1,它完美的工作!非常感谢。我最终可能会最终转移到2并最终使用委托,因为尽可能少地在包含的视图控制器中将它全部保留在场景中 – Designer023

相关问题