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

2023-11-24

我使用默认的新游戏项目制作了一个游戏,然后插入一个普通的 UIView 作为应用程序介绍场景。我将介绍“升级”为使用 SKScene,并使用将原始 gameViewController 推入堆栈的按钮。一旦游戏视图加载,它似乎有点滞后,所以我假设这与拥有 2 个完整的 skscene 和视图控制器的开销有关。我什至将着陆场景设置为暂停,但它显然仍然会使用内存!

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

当前设置:

LandingViewController
|-LandingScene

GameViewController
|- GameViewScene
|- Other Game Classes

应用程序进入 LandingViewController,它初始化 LandingScene(和登陆 UI Sprites)。 LandingViewController 处理按钮等触摸事件。当点击新游戏时,GameViewController 被推送(当前使用 Segue),GameViewController 初始化它的场景、游戏状态、UI、游戏板等。GameViewController 处理它的场景的触摸事件。当游戏结束时(单击结束游戏或游戏结束状态),GameViewController 会弹出。

LandingViewController 和 GameViewController 都控制其动画和点击等流程,因此 GameViewController 执行游戏逻辑,例如下一回合结束游戏等。 任何帮助或指示将不胜感激,因为我想正确地做到这一点!


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

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

所以你会有GameViewController and LandingScene, GameScene以及可能的其他一些场景,例如LevelSelect场景或类似的东西。

In GameViewController,您第一次初始化场景。这就是你初始化你的点LandingScene(我猜那是您实现导航菜单的地方)。

因此,从那时起,您可以使用任何您想要的场景进行转换SKView's 目前场景:方法(并且可选地使用SKTransition class).

过渡

过渡于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.使用上述使用委托模式的方法,其中场景将转换的责任委托给视图控制器。

两种方法都很好,其中第一种方法在我看来有点方便,并且被广泛使用。这就是您如何在不同场景之间导航SpriteKit以一种简单的方式。

Hint:

不要忘记覆盖场景dealloc (or deinit如果您在开发阶段使用 Swift) 方法,以确保所有场景都正确释放。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理多个 SKScene 的最佳方法是什么? 的相关文章

  • 斯威夫特/iOS。从导航堆栈中删除一些视图控制器

    这是我想做的 但我不确定这是否是正确的方法 所以请给我建议如何去做 我有初始 VC 和导航 VC 我从中推送第一个 VC 从中推送第二个 VC 接下来我介绍 来自第二个 VC 的 NavigationController 第三个 VC 现在
  • iOS 11 浏览器图像错误

    在 iOS 11 中滚动页面时出现以下错误 在 Firefox Safari 和 Chrome 中 在 Android 设备中 不会发生该错误 这些是背景图像 我不知道这是否是导致错误的原因 图 2 显示了图像在 Android 中的用途和
  • 每次 UIScrollView 释放时都会发生内存泄漏

    在我的应用程序中 我有一个滚动视图和四个表格视图 每次拖动然后释放时 我都会泄漏 48 字节 这确实很重要 正如您所看到的 两组泄漏都有相同的来源 有人见过这样的泄漏吗 Edit 1 当我单击泄漏旁边的箭头时 我会得到泄漏的以下信息 您所看
  • 当视口设置为 user-scalable=no 时,iOS/移动 Safari 仍然会缩放?检查辅助功能设置!

    这个特定的 Mobile Safari 看似不可能且未记录 问题让我今天坚持了很长一段时间 当我弄清楚它时 我正要在这里发布一个有关它的问题 问题 虽然我设置了我的 iPad 网络应用程序仍然允许手动缩放 在浏览器中捏合 但只能在我的 iP
  • 在 iPad 上显示 PDF 文档 - 颜色问题

    我为 iPad 构建了一个 PDF 阅读器 在将预览中的文档与模拟器和设备进行并排比较时 我注意到一些颜色问题 最好的形容就是颜色变得更加浓郁 近距离使用的相似颜色之间的任何差异都会变得更加明显 而所有颜色总体上看起来都更亮 尽管大肆宣传将
  • Swift 在调试和发布模式下的行为不同

    不确定这是否是 Swift XCode 或 Alamofire 的问题 但我认识到我的混合 Swift Objc 应用程序中不同地方的奇怪行为 它只发生在用 Swift 编写并使用闭包 网络的部分 这是发生这种情况的示例代码 Alamofi
  • 使用 WebRTC 构建 iOS 本机应用程序

    我找了4天了 还是没找到 我构建了所有库并将其集成到我的自定义项目中 但我不知道应该采取哪些步骤才能使其正常工作 我在代码示例 解释中发现的唯一内容是 tech appear in 2015 05 25 Getting started wi
  • 如何在 iOS 上捕获的视频中添加水印[重复]

    这个问题在这里已经有答案了 我想知道是否有人可以告诉我如何实现这一目标 如果一直在考虑几个解决方案 从捕获的视频创建单独的图像 然后将它们合并到每个图像中 然后创建一个新的 AVAsset 听起来有点复杂 您不觉得吗 合并2个视频 一个是透
  • SKAudioNode 崩溃:AVAudioPlayerNode.mm:333:开始:所需条件为 false:_engine->IsRunning()

    我有一个简单的 SKAudioNode let backgroundSound SKAudioNode fileNamed backgroundSound mp3 我用来玩backgroundSound runAction SKAction
  • 如何在 Facebook SDK for iOS 中定义“GeoPoint”属性

    我试图通过创建一个继承预定义 地点 对象的开放图对象来对开放图故事进行地理标记 但是 我不知道如何在 iOS 中定义 GeoPoint 属性 place location 这里有一个类似问题的答案 https stackoverflow c
  • 如何在谷歌地图中绘制多个点之间的路线?

    我已经在我的应用程序中实现了谷歌地图 并且我需要在地图上标记几个点 我能够用标记标记它们 但我面临的问题是尝试绘制所有这些点之间的路径 我尝试使用折线 但它只是在 A 点和 B 点之间绘制一条直线 我还尝试了谷歌地图 DirectionsA
  • 快速检查网络速度

    我想从我的 swift 应用程序检查网络速度 我发现很多帖子描述了Reachability特别是查找连接是否可达以及是 WIFI 连接还是 WWAN 连接的方法 我的问题 是否可以检测 WWAN 的类型 2G 3G 4G 你可以用以下命令检
  • UITableView行高不变

    我创建了一个自定义单元格 我有一系列字典 对于我需要创建的字典值UILables 每个单元可能包含不同数量的UILabels 所以按照我的习惯UITableViewCell类我就是这样做的 void generateCell BOOL is
  • iOS设备和iPhone模拟器内存​​组织的差异

    我正在尝试使用 Xcode 4 3 3 和 iPhone 5 1 模拟器开发一个应用程序 当我在模拟器上运行这个应用程序时 我没有收到任何警告 并且它运行得很好 但是 当我尝试在 iOS 设备上执行此操作时 我收到一条警告消息 收到内存警告
  • Xcode 12.3:为 iOS 模拟器构建,但链接和嵌入框架是为 iOS + iOS 模拟器构建的 [重复]

    这个问题在这里已经有答案了 我有一个使用链接和嵌入式自定义框架的应用程序 该应用程序在 Xcode 12 2 之前都可以为 iOS 设备和模拟器正确构建 然而 从 Xcode 12 3 开始 我收到以下错误 为 iOS 模拟器构建 但链接和
  • IOS 8 无声推送通知在没有 Xcode 的情况下无法工作

    我正在尝试测试静默推送通知 我注意到当我的设备连接到 Xcode 时 我的 iPhone IOS 8 只能接收静默通知 当它被拔掉时 我在大约 5 10 次尝试中只能收到一次静默推送 这种情况只发生在 IOS 8 上 因为我有另一部手机正在
  • iOS模型层通知Controller对象

    https developer apple com library archive documentation General Conceptual DevPedia CocoaCore MVC html https developer a
  • 如何为整个 iOS 应用程序设置自定义字体而不指定大小

    我正在尝试在整个我的应用程序中应用自定义字体iOS app 我发现我可以使用 UILabel appearance setFont UIFont fontWithName Proxima Nova size 17 0 设置所有的默认字体和大
  • Google Cardboard - Cardboard VR 套件有 iPhone / iOS 入门项目吗?

    我正在看Google Cardboard 套件 一种廉价的 VR 设置 https developers google com cardboard 使用 Android 设备玩 3d VR 游戏 我看到他们有一个 Android 演示项目
  • iOS-将图像转为视频时,CVPixelBufferCreate内存无法正确释放

    我正在将图像制作成视频 但总是因为内存警告而崩溃 分配太多CVPixelBufferCreate 我不知道如何正确处理 我看过很多类似的主题 但没有一个能解决我的问题 这是我的代码 void writeImagesArray NSArray

随机推荐

  • std::atomic::notify_all 是如何排序的?

    我希望下面的程序不会挂起 如果在 1 中以相反的顺序观察 2 和 3 则可能会因丢失通知而挂起 include
  • 如何在 select2 jquery 中的标记中设置默认值

    我正在使用 select2 http ivaynberg github io select2 作为我的标记输入 从使用 select2 标记的示例中 代码如下所示 e12 select2 tags red green blue 现在我的问题
  • Python字符串模式识别/压缩

    我可以做基本的正则表达式 但这略有不同 即我不知道模式会是什么 例如 我有一个类似字符串的列表 lst asometxt0moretxt bsometxt1moretxt aasometxt10moretxt zzsometxt999mor
  • “无法打开插座”

    如何缓解我的网站上发生的 无法打开套接字 错误 我遇到了麻烦 它是CAPTCHA 我在用着验证码 它仅在我使用 reCAPTCHA 的两个页面上显示此错误 我一直在生成新的密钥集 有时有效 有时无效 例如 它工作于Safari有时不是 但在
  • WPF:绑定数据网格不更新项目属性

    我正在尝试实现我的第一个 MVVM 应用程序 我可以将数据绑定在数据网格中 但是我在项目中所做的更改不会触发模型的 RaisePropertyChanged 方法 这是我的视图模型 public class UsersViewModel B
  • 扩展方法解析

    我为 String 编写了一个扩展方法来获取 char 参数 string Remove char 但是当我使用它时 它调用了默认值string Remove int method 实际方法的存在不应该比隐式转换具有更高的优先级吗 实例方法
  • 将数组或 DataFrame 与其他信息一起保存在文件中

    统计软件Stata允许将短文本片段保存在数据集中 这是通过使用以下方法完成的notes and or characteristics 这是一个对我来说非常有价值的功能 因为它允许我保存各种信息 从提醒和待办事项列表到有关如何生成数据的信息
  • Windows UWP 蓝牙应用程序,即使设备已关闭,扫描时也会显示设备

    我正在开发一个使用蓝牙连接到不同设备的 UWP 应用程序 我的问题是 一些已配对或之前发现的设备显示在我的设备列表中 即使它们已关闭或不在范围内 据我了解该房产系统 设备 Aep IsPresent可用于过滤掉当时不可用的缓存设备 但即使我
  • 使用适用于 .NET 的 Google API 访问用户信息

    我正在使用 Google API 预览版 1 7 0 通过 OAuth2 向用户授权 我一直在关注示例 MVC 代码 这是我的实现FlowMetadata private static readonly IAuthorizationCode
  • Android 通知不起作用

    我一整天都在尝试从 ASyncTask 获取成功上传的通知 我当前的代码没有收到任何错误 但无法在通知栏 或其他任何地方 中显示通知 我在 LogCat 中没有收到任何消息 并且通知栏中没有显示任何通知 这是我的代码 Notificatio
  • 我们什么时候应该使用 Java 中的 Singleton 类?

    根据我的想法 当我们在应用程序中共享相同的对象状态时 我们应该将类创建为 Singleton 在这种情况下 我们希望用户限制每次创建新实例 这样他们就无法维护多个状态 同意 但是通过将实例变量声明为静态可以实现相同的行为 对我来说 它看起来
  • 从 Excel VBA 创建 SQL 表

    问题是我无法获取输入到变量 tblName 中的表名来使用 而是得到一个正确命名的数据库 其中包含一个名为 tblName 的表 有没有某种方法可以在 tblName 中获取名称 或者在使用用户输入的名称创建名称后可以更改名称 Privat
  • 在 MySQL 中显示日期之间的差距

    如何在 mysql 中显示剩余 补充日期 例如 在我的有 2 列的表中 有一个快照 from date gt 14 06 2014 and to date lt 01 07 2014 会给出这个输出 From date To date 15
  • cocos2d中如何检测触摸?

    我正在使用 cocos2d 为 iPhone 开发 2d 游戏 我在游戏中使用了许多小精灵 图像 我想触摸两个相似类型的精灵 图像 然后两个精灵 图像 将被隐藏 如何检测特定精灵 图像 中的触摸 更好的方法是实际使用精灵本身的边界框 它是一
  • @Transactional 不适用于方法级别

    我有一个关于 Spring 3 2 3 Transactional 注释的问题 我的服务类如下所示 Service Transactional class InventoryDisclosureBO Autowired InventoryD
  • HTML 脚本正在 React 组件之后加载

    我的index html
  • 使用 tf.image.random 的 Tensorflow 错误:“numpy.ndarray”对象没有属性“get_shape”

    Intro 我正在使用 Tensorflow 教程 专家的 Deep MNIST 的修改版本和 Python API 用于使用卷积网络的医学图像分类项目 我想通过对训练集的图像应用随机修改来人为地增加训练集的大小 Problem 当我运行该
  • 如何将浏览器焦点从一个选项卡更改为另一选项卡

    我有一个 JavaScript 聊天客户端在一个浏览器选项卡 称为选项卡 A 中运行 现在 当消息到达时 用户可能位于另一个浏览器选项卡上 称为选项卡 B 当此类消息到达时 我正在寻找将焦点从选项卡 B 更改为我的聊天客户端 选项卡 A 的
  • 替换 javascript 中最后出现的单词[重复]

    这个问题在这里已经有答案了 我在替换 JS 中的最后一个单词时遇到问题 我仍在寻找解决方案 但无法得到它 我有这个代码 var string element html abc def abc xyz var word abc var new
  • 处理多个 SKScene 的最佳方法是什么?

    我使用默认的新游戏项目制作了一个游戏 然后插入一个普通的 UIView 作为应用程序介绍场景 我将介绍 升级 为使用 SKScene 并使用将原始 gameViewController 推入堆栈的按钮 一旦游戏视图加载 它似乎有点滞后 所以