I'在我的SpriteKit游戏中,我很难动态更改SKSpriteNodes的速度值



在我的游戏中,我实现了无限滚动平台和从屏幕底部开始滚动到顶部的背景。当它们到达屏幕顶部并在底部显示一个新的集合时,它们就会被删除。我的问题是动态调整所有衍生平台的速度。我有一个系统,它涉及一个开关盒,可以用UIButton控制,并控制平台、后台和我的玩家节点所处的"状态"。这包括播放器节点的某些属性,以及在切换情况的每个状态下平台和背景滚动的速度。我正在尝试使用SKSpriteNode.speed属性,但是它并没有按预期工作。这是我的交换机案例的一个示例:

switch state {
case 1:
background.speed = 1
platform.speed = 1
case 2:
background.speed = 2
platform.speed = 2
}

有了这个,我可以用一个按钮控制开关盒的状态,并在情况1和情况2之间返回。我可以转到情况2,使速度为2,然后如果我愿意,回到情况1,再次使速度为1。因此,实际发生的情况是,当我更改交换机情况的状态时,现有平台的速度并不真正符合新的速度值,只有在速度值更改后生成的新平台。因此,实时的情况是,我让平台在屏幕上移动,而符合新值的新平台会赶上并通过在之前产生的平台。我需要每个平台节点都实时更新,这样每组之间的间隔就相等了。

经过多次尝试和错误,我不完全确定我遗漏了什么,但如果有人知道可能的解决方案,我将不胜感激。

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

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

所以在代码中:

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

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

最新更新