Ios Spritekit游戏在iPad模拟器上出现明显滞后

Ios Spritekit游戏在iPad模拟器上出现明显滞后,ios,swift,sprite-kit,skspritenode,Ios,Swift,Sprite Kit,Skspritenode,背景: 我是一名高中计算机科学教师,我想提出一份有趣的作业,测试我学生的编程知识。我几乎没有使用SpriteKit编程iOS游戏的经验,但我认为在竞争激烈的环境中,这将是一种有趣的方式来整合许多课程概念 游戏: 每个学生将在一场对头战斗中互相较量,他们将为一艘能够向敌人移动和发射导弹的宇宙飞船的人工智能编程。每名玩家从20分开始,每次被导弹击中,他们的总得分就会减少1分,直到一名玩家命中0分,游戏结束。每个玩家只能得到10枚导弹,所以他们必须明智地使用它们。如果导弹超出视野范围或击中另一个对手,

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

游戏: 每个学生将在一场对头战斗中互相较量,他们将为一艘能够向敌人移动和发射导弹的宇宙飞船的人工智能编程。每名玩家从20分开始,每次被导弹击中,他们的总得分就会减少1分,直到一名玩家命中0分,游戏结束。每个玩家只能得到10枚导弹,所以他们必须明智地使用它们。如果导弹超出视野范围或击中另一个对手,则会补充弹药

问题: 我已经连续几年完成这项任务,每年只做一些小的改动。然而,今年在测试期间,一旦游戏开始,游戏的速度就下降到9帧左右。显然,这会带走游戏的很多乐趣,并且由于延迟而使调试变得痛苦

代码结构

节点 只有几个SklabelNode用于显示球员姓名和分数。 飞船都是节点,每个都包含一个由10枚导弹组成的阵列,这些导弹也是节点。宇宙飞船和导弹都有各自的类别,定义了它们的属性和行为。 还使用了一个背景图像。 总的来说,只有24个对象被添加到游戏场景中,这一点永远不会改变

课程

  • 初始视图控制器(PlayerPickerViewController)-这允许用户选择玩家1和玩家2。然后它选择要使用的(学生)类的名称以及他们的宇宙飞船的图像。 有一个结构,每个宇宙飞船都有一个静态对象,因此可以在不同的类中访问它们
  • 游戏的视图控制器(GameViewController)-这将获取游戏场景并使其显示在此视图控制器中
  • 游戏场景(GameSecene)-处理游戏的所有初始设置,包括创建变量和向视图添加节点
  • 宇宙飞船和导弹类-这些类处理定义宇宙飞船和导弹行为(即移动、发射、大小等)的方法和属性。学生不得修改此代码,使其在相同的游戏条件下工作
  • 学生类(“他们的姓氏”.swift)在这个类中,学生必须编写两个函数(一个用于player1,一个用于player2)。这是学生定义移动和射击策略的地方。每一帧,都会调用相应的函数来移动播放器。 当玩家在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)

    为了解决这个滞后问题,我感谢您能给我的任何帮助。 多谢各位

    如果您对代码以及类之间的交互方式感兴趣,这里有一个游戏链接。
    它不是最新的版本,但与学生们目前使用的非常相似。

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

    在其中一个iMac上使用乐器配置游戏。这将让您看到是什么导致帧速率如此低

    选择Product>Profile in Xcode以在Instruments中评测您的项目。从模板列表中选择时间分析器仪器。以下文章介绍了如何使用时间剖面仪:


    由于你的学生必须在他们的Mac电脑上测试游戏,另一种选择是制作Mac版的游戏。与iOS模拟器相比,这款游戏在Mac电脑上本机运行得更好。SpriteKit代码在Mac和iOS上都是相同的。主要区别在于在Mac上处理鼠标事件,而不是在iOS上处理触摸事件。Xcode有一个跨平台的游戏项目模板,可以让你制作一个同时在Mac和iOS上运行的游戏。

    我不清楚学生的代码是在模拟器还是在设备上运行——听起来像模拟器。通过模拟器获得的FPS通常明显低于在实际设备中看到的FPS,因此已经运行的(特别是,如果多个模拟器正在运行)可能会对FPS产生深远的影响。是的,学生们正在模拟器上运行他们的代码。他们每个人都有一台单独的计算机(Mac),可以在上面构建、调试和测试代码。我们没有足够的设备(iPad)来部署游戏进行测试。所以,每次他们修改策略时,他们都会在Mac电脑上的模拟器中运行他们的代码,这是令人沮丧的滞后。Mac是什么操作系统?苹果公司放弃了对OpenGL的支持,所以你可能会遇到OpenGL中不存在的金属缺陷——看不见并清除“冒烟的枪”,这将是这个问题的核心,所以我没有一个CLE