背景:我是一名高中计算机科学老师,我想提出一个引人入胜/有趣的作业,测试我的学生的编程知识。我很少有使用SpriteKit编程iOS游戏的经验,但我认为这将是一种在竞争激烈的环境中集成许多课程概念的有趣方式。
游戏:每个学生都将在一场面对面的战斗中相互比赛,在那里他们需要编制一艘能够移动并向他们的敌人发射导弹的宇宙飞船的人工智能。每个玩家从20点开始,每当他们被导弹击中时,他们的总数减少一,直到玩家达到零并且游戏结束。每个玩家只获得10枚导弹,因此他们必须明智地使用它们。如果导弹超出视线边界或者击中另一个对手,导弹会补充。
问题:我连续几年完成了这项任务,每年只做了很小的改动。然而,今年测试期间,一旦游戏开始,游戏将降至9fps左右。显然,这会消除游戏的大部分乐趣,并且由于滞后而使调试变得痛苦。
代码结构
节点只有几个SKLabelNode用于显示玩家姓名和分数。宇宙飞船都是节点,它们每个都包含10个导弹的阵列,这些导弹也是节点。宇宙飞船和导弹都有自己独特的类,定义了它们的属性和行为。还使用了背景图像。总共只有24个对象被添加到GameScene中,而且这种对象永远不会改变。
类
当我在我的个人MacBook Pro上构建和测试游戏时,游戏按预期运行(没有延迟)。但是,每个学生都在使用以下规格的Mac上工作:
在我看来,即使计算机变得越来越老,它们仍然能够处理这种只有20多个节点的游戏的简单化。
改变模拟器会有所不同(即iPad Pro 12.9英寸第3代到第6代iPad)吗?
我感谢你能给我的任何帮助,以解决这个滞后问题。谢谢。
如果您有兴趣查看代码以及类如何相互交互,那么这里是游戏的链接。 The GAME这不是最新版本,但它与学生目前使用的版本非常相似。
首先在设备上运行游戏以缩小问题范围并确保问题出在模拟器上。
在其中一台iMac上使用Instruments配置您的游戏。这会让你看到是什么导致帧率如此之低。
在Xcode中选择产品>配置文件以在仪器中配置您的项目。从模板列表中选择Time Profiler工具。以下文章显示了如何使用Time Profiler工具:
Finding the Slow Spots in Your Code with the Time Profiler Instrument
由于你的学生必须在他们的Mac上测试游戏,另一种方法是制作游戏的Mac版本。游戏在Mac上比iOS模拟器本地运行得更好。 SpriteKit代码在Mac和iOS上都是相同的。主要区别在于处理Mac上的鼠标事件而不是iOS上的触摸事件。 Xcode有一个跨平台的游戏项目模板,可以让你制作一个在Mac和iOS上运行的游戏。