【问题标题】:I'm having a difficult time dynamically changing SKSpriteNodes speed values in my SpriteKit game我很难在我的 SpriteKit 游戏中动态更改 SKSpriteNodes 速度值
【发布时间】:2021-01-29 07:51:31
【问题描述】:

在我的游戏中,我实现了无限滚动平台和从屏幕底部开始滚动到顶部的背景。当到达屏幕顶部并在底部出现一个新集时,它们会被删除。我的问题是为生成的所有平台动态调整速度。我有一个系统,它涉及一个可以用 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。所以实际发生的情况是,当我更改开关盒的状态时,现有的平台速度并不真正符合新的速度值,只有在速度值更改之后产生的新平台。。因此,实时的情况是,我有平台在屏幕上移动,并且符合新价值观的新平台赶上并通过了新平台之前产生的平台。我需要每个平台节点实时更新,所以每组之间的间距相等。

经过多次试验和错误,我不完全确定我错过了什么,但如果有人对可能的解决方案有任何想法,将不胜感激。

【问题讨论】:

    标签: swift xcode sprite-kit skspritenode


    【解决方案1】:

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

    你应该把平台放在某个SKNode下,并改变那个SKNode的速度。

    所以在代码中:

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

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

    【讨论】:

    • 我在这方面做了更多工作,但仍然遇到类似的问题。这是另一篇包含我的代码的帖子和一个显示正在发生的事情的视频:stackoverflow.com/questions/64436047/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多