我在SpriteKit游戏中动态更改SKSpriteNodes速度值时遇到困难

问题描述

在我的游戏中,我实现了无限滚动平台以及从屏幕底部开始并滚动到顶部的背景。当到达屏幕顶部时,它们将被删除,而在底部出现新的设置。我的问题是动态调整所有生成平台的速度。我有一个系统,其中涉及一个开关箱,该箱可以通过UIButton进行控制,并控制平台,背景和播放器节点的“状态”包括播放器节点的某些属性,以及平台和背景在开关盒的每个状态内滚动的速度。我正在尝试使用.speed的{​​{1}}属性,但是它没有按预期工作。这是我的开关盒的示例娱乐:

SKSpriteNode

这样,我可以用一个按钮控制开关盒的状态,然后在盒1和盒2之间返回。可以到盒2,将速度设为2,然后如果需要,可以回到盒1,然后再次将速度设为1。因此,实际上发生的是,当我更改开关盒的状态时,现有的平台速度并不真正符合新的速度值,只有在速度值更改后产生 的新平台。因此,实时情况是,我有跨平台移动的平台,并且确实符合新值的新平台赶上并通过了在新平台之前出现的平台。我需要每个平台节点都进行实时更新,因此每个集合之间的间距相等。

由于反复试验,我不确定自己缺少什么,但是如果有人对可能的解决方案有任何想法,将不胜感激。

解决方法

我认为您在平台属性和关系方面存在问题。平台属性代表什么?数组还是仅一个对象平台一次又一次地被覆盖?

您应该将平台置于某个SKNode下,并更改该SKNode的速度。

因此在代码中:

  • 在具有平台的类中,添加类型allPlatforms的属性SKnode并在开始时对其进行初始化。
  • 每次添加新平台时,您都会在allPlatforms下将其添加为子平台,因此allPlatforms.addChild(platform)
  • ,并在删除时从所有平台中删除:platform.removeFromParent()

然后您只需更改allPlatforms而不是platform的速度,它应该可以工作,但是另一个问题可能是它不是数组,但是我看不到您的代码,所以我只是猜:/

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...