Swift3 不能让Spritenode永远朝一个方向移动?

Swift3 不能让Spritenode永远朝一个方向移动?,swift3,sprite-kit,skaction,Swift3,Sprite Kit,Skaction,好吧,这是令人沮丧的,因为这不应该这么难。每当用户的手指向下时,我需要我的精灵节点永远朝一个方向移动。这里我创建了我的精灵节点 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.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,但是使用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")
override public func touchsbegind(touch:Set,带有事件:UIEvent?){
打印(“触摸!”)
isTouching=true
让我们先接触!
//        
让运动=矢量(
dx:10,
dy:1
)
让move=SKAction.moveBy(x:character.position.x+10,y:0,持续时间:1)
//让移动=SKAction.applyForce(移动,持续时间:0.5)
character.run(SKAction.repeatForever(move),按键:“moving”)

我使用的是.position.x字符,所以我不知道为什么它不会永远向右移动。我如何才能使节点在一个方向上连续移动?

在您的情况下,一个操作会将节点从一个起点移动到终点。如果您重复该操作,它会将节点传送到它开始的位置,然后再次移动到另一个位置结论-
SKAction
不适用于此

您有几个选择:

1) 手动影响sprite的position属性-例如,在update:method中,您将随时间增加/减少position.x/position.y属性

sprite.position.y += 1
2) 您将在update:method内的每个帧中应用强制

sprite.physicsBody.applyForce(CGVector(dx:dxValue, dy:dyValue)
3) 直接影响物理体速度矢量:

sprite.physicsBody.velocity = CGVector(dx:dxValue, dy:dyValue)
也许你可以对节点施加一个脉冲,但我认为更适合你的情况是对每一帧施加一个力

希望这是有意义和有帮助的。

这类似于吗?