self.physicsWorld.gravity = CGVectorMake(0.0, -4.0);
으로 인해 강제로 떨어지는 SKSpriteNode가 있습니다. 사용자가 화면을 두드려 잡고있을 때, 나는 SKSpriteNode가 날아 가기를 원하고, 사용자가 터치를 멈 추면 다시 땅으로 떨어집니다.SpriteKit 접촉 및 유지시 SKSpriteNode 속도
나는 속도를 변경하려 시도했지만, 그것은 단지 applyImpulse 방법 같은 작은 바운스를 만든다 :
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
flyingObject.physicsBody.velocity = CGVectorMake(0, 100)
}
}
편집 :
여기 내 장면 초기화 코드의
override func didMoveToView(view: SKView) {
/* Setup your scene here */
// Physics
self.physicsWorld.gravity = CGVectorMake(0.0, -4.0);
// flyingObject
var flyingObjectTexture = SKTexture(imageNamed:"flyingObject")
flyingObject.filteringMode = SKTextureFilteringMode.Nearest
flyingObject = SKSpriteNode(texture: flyingObjectTexture)
flyingObject.setScale(1)
flyingObject.position = CGPoint(x: self.frame.size.width * 0.35, y: self.frame.size.height * 0.6)
flyingObject.physicsBody = SKPhysicsBody(circleOfRadius:flyingObject.size.height/2.0)
flyingObject.physicsBody.dynamic = true
flyingObject.physicsBody.allowsRotation = false
self.addChild(flyingObject)
// Ground
var groundTexture = SKTexture(imageNamed:"Ground")
var sprite = SKSpriteNode(texture:groundTexture)
sprite.setScale(0.5)
sprite.position = CGPointMake(self.size.width/2 - 100, sprite.size.height)
self.addChild(sprite)
var ground = SKNode()
ground.position = CGPointMake(0, groundTexture.size().height/2)
ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.width, groundTexture.size().height * 0.5))
ground.physicsBody.dynamic = false
self.addChild(ground)
}
당신은 대신 applyImpulse 방법을 사용한다 속도를 직접 설정합니다. Apple의 문서에서 "시체가 시뮬레이션 상태에있을 때 시체에 적용되는 힘을 기준으로 속도를 조정하는 것이 일반적입니다." – 0x141E
이것은 여전히 객체 수신 거부를 만듭니다. 사용자가 멈추지 않을 때까지 끊임없이 올라갈 필요가 있습니다. –
이렇게하려면 다음 단계를 사용하여 applyForce 메소드를 사용할 수 있습니다. 1) touchesBegan에서 노드에 대한 포인터 식별 및 설정 2) 업데이트에서 : (NSTimeInterval) currentTime, 노드가 선택되면 (즉, 포인터가 nil이 아닌) 선택된 노드에 applyForce, 3) touchesEnded에서 포인터를 nil로 설정합니다. – 0x141E