Tôi đang cố gắng tạo ra một trò chơi đơn giản với bộ công cụ ma. Ý tưởng cơ bản là có một người chơi có thể nhảy để tránh các khối. Nhưng tôi có một vấn đề tôi không biết làm thế nào để làm cho nó khi người chơi chạm vào khối người chơi biến mất và hoạt hình máu bắt đầu. Trước hết tôi không hiểu mã này mà tôi tìm thấy trên trang web táo.Phát hiện va chạm trong bộ kit giả
static const uint32_t blockCategory = 0x1 <<0;
static const uint32_t playerCategory = 0x1 <<1;
Tôi đang gọi hàm didBeginContact và đặt NSLOG ("đã gọi hàm") vào đó. Nhưng tôi không bao giờ nhận được đầu ra trong trình gỡ lỗi của mình.
Đây là _player và _block mã của tôi: - (SKSpriteNode *) nhân vật {
_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];
đang _player của tôi:
[_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;
}
Ngoài ra tôi không thực sự hiểu những gì categoryBitMask và collisionBitMask làm. Sau khi tôi làm việc đó, tôi muốn làm cho nhân vật biến mất khỏi màn hình và hoạt hình máu bắt đầu, nhưng tôi không biết làm thế nào để điều đó xảy ra. Tôi nghĩ bạn phải làm điều gì đó như: nếu (_player & & _block didcollide) { } Nhưng tôi không biết cách thực hiện chính xác.
Xem câu trả lời này http://stackoverflow.com/questions/22495285/sprite-kit-collision-detection – Jeff