나는 Flappy Bird Style 게임을 만드는 SpriteKit 자습서를 살펴 보았습니다. 내가 겪고있는 문제 중 하나는 충돌 감지 코드가 잘못 발사되었다는 것입니다.여러 충돌을 잘못 감지하는 SpriteKit
가끔은 완벽 해집니다 ... 땅에 부딪 쳤고, 땅에 충돌했을 때의 방법을 사용합니다. 그러나, 무작위로 보이는 시간에, 그것은 땅에 부딪칠 것이고, 지상 충돌을위한 방법을 2-6 번 정도 발사 할 것입니다. 화면에 다른 노드가 있는지 여부는 중요하지 않습니다. 나는 앉아서 즉시 떨어 뜨릴 수 있고 때로는 충돌 코드가 올바르게 실행되고 때로는 여러 번 실행됩니다. 이 코드에서 문제가 발생 했습니까?
업데이트 : 두 개체가 여러 개의 교차점에서 만나는 지점 인 것으로 보입니다. 오브젝트 A가 오브젝트 B와 3 점으로 교차하면 3 번 발사됩니다. 당신이 이것을 어떻게 지키지 않습니까?
- (void)didBeginContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *firstBody, *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
{
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}
else
{
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if ((firstBody.categoryBitMask & pillerCategory) != 0 &&
(secondBody.categoryBitMask & flappyBirdCategory) != 0)
{
[self pillar:(SKSpriteNode *) firstBody.node didCollideWithBird:(SKSpriteNode *) secondBody.node];
}
else if ((firstBody.categoryBitMask & flappyBirdCategory) != 0 &&
(secondBody.categoryBitMask & bottomBackgroundCategory) != 0)
{
[self flappyBird:(SKSpriteNode *)firstBody.node didCollideWithBottomScoller:(SKSpriteNode *)secondBody.node];
}
}
- (void)pillar:(SKSpriteNode *)pillar didCollideWithBird:(SKSpriteNode *)bird
{
NSLog(@"Did collide with bird");
[self showGameOverLayer];
}
- (void)flappyBird:(SKSpriteNode *)bird didCollideWithBottomScoller:(SKSpriteNode *)bottomBackground
{
NSLog(@"Did collide with scroller");
[self showGameOverLayer];
}
개체가 충돌하지 않도록 충돌 비트를 설정 했습니까? 아마도 스프라이트가 땅바닥에 튀어 오를 수도 있습니다. – 0x141E
아래쪽 스크롤러가 반복되는 것처럼 보이며, 노드가 떨어지면 원래 이미지와 다른 이미지가 충돌하여 두 개의 충돌이 발생합니다. – user717452