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

时间:2017-04-09 20:27:43

标签: 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.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")

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

1 个答案:

答案 0 :(得分:2)

在您的情况下,操作会将节点从一个起点移动到终点。如果你重复它,它将传送节点到它开头的位置,并再次移动到它的最终位置。结论 - <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>不适用于此。

您有几个选择:

1)手动影响精灵的位置属性 - 例如在更新:方法内,随着时间的推移,你将增加/减少position.x / position.y属性。

SKAction

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

sprite.position.y += 1

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

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

可能你可以对节点施加冲动,但我认为更适合你的情况是每帧都施力。

希望这有意义并且有所帮助。