同时运行 2 个 '.move' SKActions

问题描述

我正在使用 SKSpriteNodeSKAction 实现五彩纸屑。

期望的行为: 五彩纸屑应该来回摇晃,同时也落下。

实际行为: 五彩纸屑掉下来——但不会来回摇晃。

我尝试过的:将两个操作放入 group 中,如下所示:

            let x = MainData.screenWidth*CGFloat.random(in: 0...1)
            let testNode = SKSpriteNode(texture: MainData.confettiTexture)
            let gravityAction = SKAction.move(to: CGPoint(x: x,y: -100.0),duration: 5.0)
            let swaySequence = SKAction.sequence([
                SKAction.move(by: CGVector(dx: -MainData.screenWidth*0.2,dy: 0.0),duration: 0.5),SKAction.move(by: CGVector(dx: MainData.screenWidth*0.2,duration: 0.5)
            ])
            let swayInfinitely = SKAction.repeatForever(swaySequence)
            let group = SKAction.group([
                swayInfinitely,gravityAction
            ])
            
            gravityAction.timingMode = .easeIn
            
            testNode.position = CGPoint(x: x,y: MainData.screenHeight)
            testNode.size = CGSize(width: MainData.screenWidth*0.05,height: MainData.screenWidth*0.05)
            
            testNode.run(group)

我的理论: 我猜这个问题的发生是因为我试图同时使用 move(to:duration:)move(by:duration:),从而提供了相互冲突的 x 轴值。

那么,我怎样才能让我的五彩纸屑在落下的同时来回摇摆呢?我做错了什么/不了解 SKAction

解决方法

将五彩纸屑节点作为父 SKNode 的子节点。让父节点运行重力动作,五彩纸屑节点运行摇摆动作。