Мне нужно сделать что-то вроде точки тяжести в Свифт. 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)
}
Спасибо за помощь. Я попробовал это теперь с радиальной гравитацией вместо весеннего поля, и после того, как узел находится в точке своего происхождения, он исчезает. Я добавил код. –
Я реализовал ваш код, но спрайт настолько велик, что он едва двигается, когда я сажусь. – 0x141E
такой же здесь, он просто исчезает. – santhu