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)
也许你可以对节点施加一个脉冲,但我认为更适合你的情况是对每一帧施加一个力
希望这是有意义和有帮助的。这类似于吗?