我一直在尝试所有的资源,感谢我亲爱的朋友Sangon,这里的成员和来自Ray Wenderlich的教程书的IOS游戏,我想要做的是首先为每个节点设置类别然后如果我的球员的子弹与敌人相撞,我希望敌人消失。现在我有一些建议从哪里开始,但这件事让我疯狂,我已经尝试过并且尝试了敌人并没有消失。请帮帮我。感谢。
static const uint32_t EnemyCategory = 1;
static const uint32_t bulletCategory = 2;
- (void) fire:(float)targetAngle {
bullet = [SKSpriteNode spriteNodeWithImageNamed:@"cannonbullet"];
bullet.position = _Player.position;
bullet.physicsBody = [SKPhysicsBody
bodyWithCircleOfRadius:bullet.frame.size.width/2];
bullet.physicsBody.categoryBitMask = bulletCategory;
bullet.physicsBody.collisionBitMask = bulletCategory | EnemyCategory;
bullet.physicsBody.contactTestBitMask = bulletCategory | EnemyCategory;
[self addChild:bullet];
int x = _Player.position.x + 1000 * cos(targetAngle);
int y = _Player.position.y + 1000 * sin(targetAngle);
[bullet runAction:[SKAction moveTo:CGPointMake(x, y) duration:2]];
}
- (void) didBeginContact:(SKPhysicsContact *)contact {
SKPhysicsBody *temp;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) {
temp = contact.bodyB;
} else {
temp = contact.bodyA;
}
if (temp.categoryBitMask == EnemyCategory) {
[temp.node removeFromParent];
}
}
- (void) Enemy:(CGSize)size {
Enemy = [SKSpriteNode spriteNodeWithImageNamed:@"enemy1@2x"];
Enemy.position = CGPointMake(self.size.width/2, self.size.height/2);
Enemy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Enemy.frame.size];
Enemy.physicsBody.dynamic = NO;
Enemy.physicsBody.categoryBitMask = EnemyCategory;
[self addChild:Enemy];
}
答案 0 :(得分:0)
我能看到的唯一问题是你没有正确设置SKPhysicsContactDelegate
委托
你必须做这样的事情:
@interface MyScene : SKScene<SKPhysicsContactDelegate>
一旦你这样做,你还必须将场景设置为contactDelegate。它看起来像这样:
self.physicsWorld.contactDelegate = self;
完成此操作后,您的场景将自动收到didBeginContact:
和didEndContact:
条消息 。这些方法不是您手动调用 的方法。
Here你可以找到一个使用碰撞检测的教程(并在碰撞检测后删除对象)
来自documentation'SKPhysicsContactDelegate'
实现SKPhysicsContactDelegate协议的对象可以在物理世界中两个物理主体彼此接触时作出响应。要接收联系人消息,请设置SKPhysicsWorld对象的contactDelegate属性。联系人开始或结束时会调用该代表。
希望这有帮助