好的,这很令人沮丧,因为这不应该这么难。每当用户用手指向下时,我需要我的精灵节点在一个方向上永远移动。在这里,我创建了我的精灵节点
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所以我不知道为什么它不会永远向右移动。如何使节点在一个方向上连续移动?
答案 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)
可能你可以对节点施加冲动,但我认为更适合你的情况是每帧都施力。
希望这有意义并且有所帮助。