Ich versuche ein einfaches Spiel mit Sprite-Kit zu machen. Die Grundidee ist, dass es einen Spieler gibt, der springen kann, um Blöcke zu vermeiden. Aber ich habe ein Problem, ich weiß nicht, wie man es macht, dass, wenn der Spieler den Block trifft, der Spieler verschwindet und die Blutanimation beginnt. Zuerst verstehe ich nicht, was dieser Code tut, den ich auf der Apfelwebsite fand.Erkennen von Kollisionen im Sprite-Kit
static const uint32_t blockCategory = 0x1 <<0;
static const uint32_t playerCategory = 0x1 <<1;
als ich die didBeginContact Funktion nenne und legte ein NSLog ("did Call-Funktion") darin. Aber ich erhalte nie die Ausgabe in meinem Debugger.
Hier ist meine _player und _block Code: - (SKSpriteNode *) Zeichen {
_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];
Mein _player Code:
[_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;
}
verstehe ich auch nicht wirklich, was die categoryBitMask und collisionBitMask machen. Nachdem ich diese Arbeit habe, möchte ich den Charakter vom Bildschirm verschwinden lassen und die Blutanimation starten, aber ich habe keine Ahnung, wie ich das zulassen soll. Ich denke, du musst etwas tun wie: if (_player & & _block didcollide) { } Aber ich weiß nicht, wie es genau geht.
Siehe diese Antwort http://stackoverflow.com/questions/22495285/sprite-kit-collision-detection – Jeff