Próbuję zrobić prostą grę z zestawem sprite. Podstawową ideą jest to, że istnieje jeden gracz, który może skakać, aby uniknąć bloków. Ale mam problem Nie wiem jak to zrobić, że gdy gracz trafi blok, odtwarzacz znika i zaczyna się animacja krwi. Przede wszystkim nie rozumiem, co ten kod robi, że znalazłem na stronie internetowej jabłka.Wykrywanie kolizji w sprite kit
static const uint32_t blockCategory = 0x1 <<0;
static const uint32_t playerCategory = 0x1 <<1;
Następnie wywołuję funkcję didBeginContact i umieszczam w niej NSLOG ("did call function"). Ale nigdy nie otrzymuję danych wyjściowych w moim debugerze.
Oto moja _player i _block Kod: - znak (SKSpriteNode *) {
_player = [SKSpriteNode spriteNodeWithImageNamed:@"soldier_run1"];
_player.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:_player.size.width /2 -5];
_player.physicsBody.dynamic = YES;
_player.physicsBody.usesPreciseCollisionDetection = YES;
_player.physicsBody.friction = 0;
_player.physicsBody.categoryBitMask = playerCategory;
_player.physicsBody.collisionBitMask = blokCategory;
_player.name = @"player";
SKAction *animAction = [SKAction animateWithTextures:playerTextures timePerFrame:0.1 resize:YES restore:YES];
Mój kod _player:
[_player runAction:[SKAction repeatActionForever:animAction]];
return _player;
}
-(SKSpriteNode *)block {
_blok = [[SKSpriteNode alloc] initWithColor:[SKColor blackColor] size:CGSizeMake(15, 40)];
//physics
_blok.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_blok.size];
_blok.physicsBody.dynamic = NO;
_blok.name = @"block";
_blok.physicsBody.categoryBitMask = blokCategory;
_blok.physicsBody.collisionBitMask = playerCategory;
SKAction *moveBlock = [SKAction sequence:@[
[SKAction moveToX:-20 duration:2] ]];
[_blok runAction:moveBlock ];
return _blok;
}
Także ja naprawdę nie rozumiem co categoryBitMask i collisionBitMask zrobić. Po wykonaniu tego zadania chciałbym, aby postać zniknęła z ekranu i uruchomił animację krwi, ale nie mam pojęcia, jak to zrobić. Myślę, że musisz zrobić coś takiego: jeśli (_player & & _block didcollide) { } Ale nie wiem jak to zrobić dokładnie.
Zobacz tę odpowiedź http://stackoverflow.com/questions/22495285/sprite-kit-collision-detection – Jeff