With my current code, the node is extremely laggy, and moves or teleports in random directions for some reason when its flicked. How can i fix this, and also can someone explain why it is teleporting and moving to random places in the scene.
Also, is there anyway to allow the node to be moved only when it is dragged from its position, rather than being at the gesturerecognizer's coordinates at all times?
override func didMove(to view: SKView) { let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.pan(_:))) view.addGestureRecognizer(gestureRecognizer) circleNode.physicsBody = SKPhysicsBody(circleOfRadius: 20) self.physicsWorld.gravity = CGVector(dx: 0, dy: 0) self.addChild(circleNode) } @objc func pan(_ recognizer: UIPanGestureRecognizer) { if recognizer.state == .changed { self.physicsWorld.gravity = CGVector(dx: 0, dy: 0) var location = recognizer.location(in: self.view!) location = self.convertPoint(fromView: location) circleNode.position = location } if recognizer.state == .ended { self.physicsWorld.gravity = CGVector(dx: 0, dy: -9.8) let transformerX = 1024/self.view!.frame.size.width let transformerY = 768/self.view!.frame.size.height let velocity = recognizer.velocity(in: self.view) circleNode.physicsBody?.applyForce(CGVector(dx: velocity.x * transformerX, dy: velocity.y * transformerY)) } }
https://stackoverflow.com/questions/66995546/how-to-drag-and-flick-a-node-in-spritekit-while-gravity-is-present April 08, 2021 at 07:43AM
没有评论:
发表评论