总不能让 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)
也许您可以对节点施加脉冲,但我认为更适合您的情况的是在每一帧都施加力。
希望这说得通并且对您有所帮助。
好吧,这很令人沮丧,因为这不应该这么难。每当用户按下手指时,我都需要我的精灵节点永远朝一个方向移动。在这里我创建我的精灵节点
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)
也许您可以对节点施加脉冲,但我认为更适合您的情况的是在每一帧都施加力。
希望这说得通并且对您有所帮助。