有没有办法在 .sks 文件中布局我的整个关卡,但只加载当前视图中的内容?

Posted

技术标签:

【中文标题】有没有办法在 .sks 文件中布局我的整个关卡,但只加载当前视图中的内容?【英文标题】:Is there a way to layout my entire level in an .sks file, but only load whats currently in view? 【发布时间】:2017-08-30 13:17:37 【问题描述】:

我在互联网上看到过这个概念,但找不到任何关于如何做到这一点的细节。

我想在一个 .sks 文件中布置我的整个关卡,但在任何给定时刻只加载播放器/帧视图中的内容。在我的游戏中,我有永远上下起伏的平台,简单的游荡敌人,以及在空中漂浮并上下摆动的可收集硬币。由于这些操作正在使用

SKAction.repeatForever

即使不在玩家的视线范围内,它们也会继续前进。我看到的唯一其他选择是给每个动作一个“键”,然后将不可见的精灵放置在接触时开始和停止某些动作的关卡中。虽然可行,但它似乎很快就会变得非常复杂。

有没有更直接的方式来布置我的整个场景,但只加载当前可见的内容?我不确定如何称呼这个概念,这可能是我找不到太多关于它的原因。

感谢任何见解!

【问题讨论】:

【参考方案1】:

没有简单的方法可以做到这一点。我个人的方法是将您的 SKS 加载到根本不附加到根节点的SKScene 中(SKView)并使用SKCameraNodecontainedNodeSet 将所有节点从加载的场景移动到用户可以看到的场景。然后,您需要实现在两个场景之间不断切换的方法。

如果您只关心操作,那么您可以避免交换并暂停所有不在containedNodeSet 中的节点,并让其中的节点感到不安。

【讨论】:

谢谢你!我会研究一下 containsNodeSet。 您是否愿意解释您所说的第二部分,关于取消暂停仅在视图中的操作? 启动所有节点,将 isPaused 设置为 true,然后遍历 containsNodeSet 将 isPaused 设置为 false。当某个节点不再在您的节点集中时,将该节点设置回 true。

以上是关于有没有办法在 .sks 文件中布局我的整个关卡,但只加载当前视图中的内容?的主要内容,如果未能解决你的问题,请参考以下文章

试图建立平台,我可以从下面跳过,但降落在上面。难以微调逻辑

从文件名加载 SpriteKit 关卡

试图制造我可以从下面跳过但可以降落在上面的平台。无法微调逻辑

在spritekit swift问题中更改场景

即使应用程序关闭,也可以在我的应用程序中保存游戏关卡?

从 SKS 文件加载节点时使用的初始化程序