Sto provando a creare un gioco semplice con il kit sprite. L'idea di base è che c'è un giocatore che può saltare per evitare i blocchi. Ma ho un problema, non so come farlo quando il giocatore colpisce il blocco il giocatore scompare e inizia l'animazione del sangue. Prima di tutto non capisco cosa faccia questo codice che ho trovato sul sito di mele.Rilevamento di collisioni nel kit sprite
static const uint32_t blockCategory = 0x1 <<0;
static const uint32_t playerCategory = 0x1 <<1;
di me chiamando la funzione didBeginContact e mettere un NSLog ("chiamata di funzione ha fatto") in esso. Ma non ho mai ricevuto l'output nel mio debugger.
Ecco il mio _player e _block codice: - (SKSpriteNode *) carattere {
_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];
Il mio codice _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;
}
Anche io non capisco quello che il categoryBitMask e collisionBitMask fare. Dopo aver lavorato, vorrei far sparire il personaggio dallo schermo e avviare l'animazione del sangue, ma non ho idea di come farlo accadere. Penso che devi fare qualcosa come: if (_player & & _block didcollide) { } Ma non so come farlo esattamente.
Vedere questa risposta http://stackoverflow.com/questions/22495285/sprite-kit-collision-detection – Jeff