处理多个SKScenes的最佳方法是什么?

设计器023

我使用默认的新游戏项目制作了一个游戏,然后插入了一个普通的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游戏模板的默认状态)并具有多个场景。

因此,您将拥有GameViewControllerLandingSceneGameScene还有其他一些场景,例如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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

处理在R中连接的多个表的最佳方法是什么?

用angular处理多个项目的最佳方法是什么?

处理照片上传的最佳方法是什么?

处理ExecutionException的最佳方法是什么?

处理异常的最佳方法是什么?

减少多个 if 语句的最佳方法是什么?

在Terraform中将多个AWS帐户作为环境处理的最佳方法是什么?

跨多个路由文件在NodeJS中处理CAS身份验证的最佳方法是什么?

封装多个方法调用的最佳方法是什么?

事件处理动态创建的HTML的最佳方法是什么?

在 useMutation 钩子中处理错误的最佳方法是什么

处理大型CSV文件的最佳方法是什么?

处理异步迭代器和等待的最佳方法是什么?

在美丽的汤蟒中处理无的最佳方法是什么

PHPexcel导出处理大型导出的最佳方法是什么

处理侦听并触发事件的元素/对象的最佳方法是什么?

在React Redux中处理提取错误的最佳方法是什么?

处理Django的objects.get的最佳方法是什么?

处理AWT Graphics上下文的最佳方法是什么?

Elixir中错误处理的最佳方法是什么

处理NSDateFormatter语言环境“ feechur”的最佳方法是什么?

在调度程序中处理AEM缓存的最佳方法是什么?

处理JSON上的键名更改的最佳方法是什么?

处理货币/货币的最佳方法是什么?

处理布尔值的最佳方法是什么?

在 ef core 2 中处理连接的最佳方法是什么

处理浮点错误的最佳方法是什么?

用不同的文化处理验证的最佳方法是什么

处理页面切换的最佳方法是什么?