2014-12-10 6 views
0

Мне нужно сделать что-то вроде точки тяжести в Свифт. SpriteNode находится в середине экрана, а по левым или правым жестам он может перемещаться вдоль оси x.Swift SpriteKit Gravity Point

Но после, например, для. a «RightSwipe», он должен вернуться к исходной точке. Вы могли бы сказать, что это должно выглядеть как прыжок вдоль оси х.

Мир тяжести не может быть конкретным моментом, так как я могу «заставить» его вернуться к своей первоначальной точке?

Я пробовал его с помощью RadialGravityField от SKFieldNode, но после того, как импульс узлов был создан, он возвращается к исходной точке и исчезает. Как я могу избежать этого?

Мой код:

{ 
....... 

Node = SKSpriteNode(texture: Node1) 
Node.size = CGSize(width: 100, height: 140) 
Node.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/4) 
Node.zPosition = 3 
Node.runAction(RunAnimation) 

Node.physicsBody = SKPhysicsBody(rectangleOfSize: Node.size) 
Node.physicsBody?.dynamic = true 
Node.physicsBody?.allowsRotation = false 
Node.physicsBody?.usesPreciseCollisionDetection = true 
Node.physicsBody?.restitution = 0 
Node.physicsBody?.velocity = CGVectorMake(0, 0) 

self.addChild(Node) 

let swipeRight:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("SwipeRight:")) 
swipeRight.direction = .Right 
view.addGestureRecognizer(swipeRight) 


let swipeLeft:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("SwipeLeft:")) 
swipeLeft.direction = .Left 
view.addGestureRecognizer(swipeLeft) 

} 

func SwipeRight(recognizer:UISwipeGestureRecognizer) { 

Node.physicsBody?.applyImpulse(CGVectorMake(10,0)) 

} 

func SwipeLeft(recognizer:UISwipeGestureRecognizer) { 

Node.physicsBody?.applyImpulse(CGVectorMake(-10,0)) 

} 

override func update(currentTime: CFTimeInterval) { 

if(Node.position.x > self.frame.size.width/1.6) 
    { 
     fieldNode = SKFieldNode.radialGravityField() 
     fieldNode.enabled = true 
     fieldNode.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/4) 
     fieldNode.strength = 0.4 
     addChild(fieldNode) 
    } 

    if(Node.position.x < self.frame.size.width/2.6) 
    { 
     fieldNode = SKFieldNode.radialGravityField() 
     fieldNode.enabled = true 
     fieldNode.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/4) 
     fieldNode.strength = 0.4 
     addChild(fieldNode) 
    } 

ответ

1

Похоже, работа для радиальной силы тяжести SKFieldNode. link

+1

Спасибо за помощь. Я попробовал это теперь с радиальной гравитацией вместо весеннего поля, и после того, как узел находится в точке своего происхождения, он исчезает. Я добавил код. –

+0

Я реализовал ваш код, но спрайт настолько велик, что он едва двигается, когда я сажусь. – 0x141E

+0

такой же здесь, он просто исчезает. – santhu