总不能让 Sprite Node 一直往一个方向移动吧?

Cant make Spritenode move in one direction forever?

好吧,这很令人沮丧,因为这不应该这么难。每当用户按下手指时,我都需要我的精灵节点永远朝一个方向移动。在这里我创建我的精灵节点

character.size = CGSize(width: 58, height: 139)
        character.color = UIColor.red
        character.position = CGPoint(x: (scene?.size.width)!/2, y: (scene?.size.height)!/2)
        character.zPosition = 3
        character.physicsBody = SKPhysicsBody(rectangleOf: character.size)
        character.physicsBody?.isDynamic = true
        character.physicsBody?.affectedByGravity = false
        character.physicsBody?.allowsRotation = false

然后在触摸开始时,我尝试直接施加一个力并在触摸结束时删除重复的滑行,但是使用 SKaction.moveBy,节点移动 10,然后快速返回到原始位置:

override public func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("touch!")
        isTouching = true
        let touch = touches.first!
//        
        let movement = CGVector(
            dx: 10,
            dy: 1
        )
        let move = SKAction.moveBy(x: character.position.x+10, y: 0, duration: 1)
        //let move = SKAction.applyForce(movement, duration: 0.5)
        character.run(SKAction.repeatForever(move), withKey: "moving")

我正在使用 character.position.x 所以我不知道为什么它不只是永远向右移动。如何让节点在一个方向上连续移动?

在您的例子中,一个动作会将一个节点从一个起点移动到终点。如果你重复它,它会传送节点到它开始的位置,然后再次移动到它的最终位置。结论 - SKAction 不适合这个。

您有几个选择:

1) 手动影响精灵的位置 属性 - 例如。在 update: 方法中,你将 increment/decrement position.x/position.y 属性 随着时间的推移。

sprite.position.y += 1

2) 您将在更新的每一帧中应用力:方法

sprite.physicsBody.applyForce(CGVector(dx:dxValue, dy:dyValue)

3) 直接影响物理体速度矢量:

sprite.physicsBody.velocity = CGVector(dx:dxValue, dy:dyValue)

也许您可以对节点施加脉冲,但我认为更适合您的情况的是在每一帧都施加力。

希望这说得通并且对您有所帮助。