스프 라이트 노드가 플랫폼을 뛰어 넘을 수는 있지만 다시 되돌릴 수는없는 문제를 해결하려고합니다. 이 코드를 사용하여 시도 :물리학을 켜고 끄기
override func didMove(to view: SKView) {
if (thePlayer.position.y > stonePlatform1.position.y) == true {
stonePlatform1.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: stonePlatform.size.width * 0.9, height: stonePlatform.size.height * 0.75))
stonePlatform1.physicsBody!.isDynamic = false
stonePlatform1.physicsBody!.affectedByGravity = false
stonePlatform1.physicsBody!.categoryBitMask = BodyType.object.rawValue
stonePlatform1.physicsBody!.contactTestBitMask = BodyType.object.rawValue
stonePlatform1.physicsBody!.restitution = 0.4
}
}
아이디어는 플레이어가 플랫폼 이상인 경우에 플랫폼의 물리학 본체에 설정하는 것이 었습니다. 그러나이 코드를 사용하면 물리학이 전혀 작동하지 않습니다. 사실이 코드를 사용해 보았습니다 :
override func didMove(to view: SKView) {
if (thePlayer.position.y < stonePlatform1.position.y) == true {
stonePlatform1.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: stonePlatform.size.width * 0.9, height: stonePlatform.size.height * 0.75))
stonePlatform1.physicsBody!.isDynamic = false
stonePlatform1.physicsBody!.affectedByGravity = false
stonePlatform1.physicsBody!.categoryBitMask = BodyType.object.rawValue
stonePlatform1.physicsBody!.contactTestBitMask = BodyType.object.rawValue
stonePlatform1.physicsBody!.restitution = 0.4
}
}
그리고 물리학이 켜지지 않습니다. IF 문이 없으면 물리학은 항상 작동합니다.
매번 물리 치료사를 만드는 대신 collisionBitMask 만 사용하면 어떨까요? – BadgerBadger
전에도 해봤지만 전 몸 전체를 더 잘 보았습니다. 또한 이와 같은 시나리오에는 대개 contactTest, collision, mass 등의 여러 값을 변경해야합니다. 이렇게하면이 모든 것을 해결할 수 있습니다. – TheValyreanGroup
그런 일을하면 다른 것에 대한 충돌을 망칠 것입니다. 적군이 거기를 걷는다면 어떨까요? 플레이어의 통과로 떨어질 것입니다. 그것을하는 더 간단한 방법이 있어야합니다. 함수에 값 변경을 동봉하십시오. 그것은 또한 cpu 능률적 일 것이다. – BadgerBadger