SKScene에 고정 된 SKPhysicsBody가 두 가지 있습니다. 이 둘의 유일한 차이점은 카테고리 BitMask입니다. 하나는 512의 categoryBitMask, 다른 1024SKPhysicsContact에서 bodyA 및 bodyB는 어떻게 결정됩니까?
내 프로그램에서static const u_int32_t kWallCategory = 0x1 << 9; //512
static const u_int32_t kStructureCategory = 0x1 << 10; //1024
, 나는이 시작 -(void)didBeginContact:(SKPhysicsContact *)contact
에서 호출 표준 접촉 핸들러가 있습니다
-(void)handleContact:(SKPhysicsContact*)contact {
SKPhysicsBody *bodyA = contact.bodyA;
SKPhysicsBody *bodyB = contact.bodyB;
int type1 = contact.bodyA.categoryBitMask;
int type2 = contact.bodyB.categoryBitMask;
를 내 프로그램에서을, 나는을 결정해야 동적 몸체와 두 개의 고정 된 몸체 중 하나 사이의 접촉 벡터. 이렇게하기 위해, 내가 눈치 무엇 SKPhysicsContact
CGVector c = contact.contactNormal;
의 contactNormal 속성에 액세스하지만, 접촉 벡터가 일관성이 있다고하고 있었고, 난 가끔 SKPhysicsContact의 bodyA이 정체 되었기 때문이었다 결정 때로는 몸이 역동적 인 몸이었습니다.
예를 들어 총알 (역동적 인 몸체)이 왼쪽에서 건물 (고정 된 몸체)에 닿았을 때마다 나는 (-1,0)
의 접촉 벡터를 원합니다. 현재, 연락처 벡터는 (-1,0)
(왼쪽부터)이고 때로는 (1,0)
(오른쪽부터)은 모두 몸체에 따라 달라집니다. contact.bodyA
입니다.
내 질문 : bodyP와 bodyP를 결정하는 것은 SKPhysicsContact에서 무엇입니까?
이것은 대단한 선동입니다. 귀하의 연락처 처리기가하는 것에 대해 중요하다고 가정 할 때 어떤 신체가 어떤 신체인지 항상 테스트해야한다는 귀하의 결론은 그 길에 문제가 있습니다. 항상 테스트하는 이유는 어떤 신체 기관을 제어하기가 어렵지 않다는 것입니다 Apple은 신체 A와 B가 * 결정적 순서로 존재할 것이라고 약속하지 않습니다. 생성 순서와 상관 관계가 있지만 모든 장치와 OS 버전에서 동일하다는 보장은 없습니다. – rickster