Spritekit游戏在iPad模拟器上的运行明显滞后

时间:2019-03-24 14:58:21

标签: ios swift sprite-kit skspritenode

背景: 我是一名高中计算机科学老师,我想提出一个有趣的/有趣的作业来测试学生的编程知识。我几乎没有使用SpriteKit编写iOS游戏的经验,但是我认为这是在竞争环境中整合许多课程概念的一种有趣方式。

游戏: 每个学生都将在一场正面交锋中互相比赛,他们将为一艘太空船的人工智能编程,该人工智能可以向敌人移动并发射导弹。每个玩家都以20分开始,每当他们被导弹击中时,其总积便减少1,直到玩家击中零并且游戏结束。每个玩家仅获得10枚导弹,因此必须明智地使用它们。如果导弹超出视线范围或击中了另一对手,它们就会补充。

问题: 我已经连续数年完成这项工作,每年只做很小的改动。但是,今年在测试期间,一旦游戏开始,游戏速度将下降至9fps。显然,这会浪费很多游戏的乐趣,并且由于滞后而使调试变得痛苦。

代码结构

节点 只有几个SKLabelNodes用于显示玩家名称和得分。 飞船既是节点,又各自包含10枚导弹的阵列,这些导弹也是节点。宇宙飞船和导弹都有其各自的类别,它们定义了它们的属性和行为。 还使用了背景图像。 总共只有24个对象被添加到GameScene中,并且永远不会改变。

课程

  1. 初始视图控制器(PlayerPickerViewController)-这允许用户选择谁是Player 1和Player2。然后选择要使用的(学生)类的名称以及他们的太空飞船的图像。 每个宇宙飞船都有一个带有静态对象的结构,因此可以在不同的类中对其进行访问。
  2. 游戏的视图控制器(GameViewController)-这需要GameScene并将其显示在该视图控制器中
  3. 游戏场景(GameScene)-处理游戏的所有初始设置,包括创建变量和向视图添加节点。
  4. 宇宙飞船和导弹类-这些类处理定义宇宙飞船和导弹行为(即运动,发射,大小等)的方法和属性。学生不得修改此代码,以使他们在相同的游戏条件下都能正常工作。
  5. 学生类(“他们的姓氏” .swift)在该类中,学生必须编程两个功能(一个用于播放器1,一个用于播放器2)。这是学生定义移动和射击策略的地方。每播放一帧,就会调用适当的功能来移动播放器。 在PlayerPickerViewController中选择了玩家后,游戏会了解每个帧需要调用哪些学生班级(基于他们的姓名和班级名称,它们的名称完全相同)。

当我在个人MacBook Pro上构建和测试游戏时,游戏将按预期运行(没有滞后)。但是,每个学生都在使用以下规格的Mac上工作:

  • iMac(21.5英寸,2013年末)
  • 处理器2.9 GHz Intel Core i5
  • 内存8 GB 1600 MHz DDR3
  • 图形NVIDIA GeForce GT 750M 1024 MB

在我看来,即使计算机变老了,它们仍然应该能够处理只有20多个节点的游戏。

更改模拟器是否会有所作为(例如,iPad Pro 12.9英寸的第三代到第六代iPad)?

感谢您为解决此滞后问题而提供的任何帮助。 谢谢。

如果您有兴趣查看代码以及各类之间的交互方式,请点击这里。 The GAME 它不是最新版本,但与学生当前使用的版本极为相似。

1 个答案:

答案 0 :(得分:1)

首先在设备上运行游戏以缩小问题范围,并确保问题出在模拟器上。

在其中一台iMac上使用乐器来配置您的游戏。这样一来,您就可以了解导致帧速率如此之低的原因。

在Xcode中选择产品>配置文件以在Instruments中配置项目。从模板列表中选择“ Time Profiler”工具。以下文章显示了如何使用Time Profiler工具:

Finding the Slow Spots in Your Code with the Time Profiler Instrument

由于学生必须在Mac上测试游戏,因此可以选择制作Mac版本的游戏。在Mac上,本机运行的游戏要比iOS Simulator更好。 SpriteKit代码在Mac和iOS上都是相同的。主要区别是在Mac上处理鼠标事件,而不是在iOS上处理触摸事件。 Xcode具有跨平台的游戏项目模板,可让您制作可在Mac和iOS上运行的游戏。