我正在使用Sprite Kit进行复古街机游戏。我是这个框架的新手,所以我每时每刻都发现新事物,但很难解决这个问题,我试图解决过去几个小时。
首先是游戏的screendump和红色概述的物理机构。
http://i.imgur.com/KcbMVn4.png?1
当你击中拳击手套按钮时,这个大家伙会通过这种方法进行击球
-(void)performPunch {
SKTexture *punch1 = [SKTexture textureWithImageNamed:@"punch1"];
SKTexture *punch2 = [SKTexture textureWithImageNamed:@"punch2"];
SKTexture *punch3 = [SKTexture textureWithImageNamed:@"punch3"];
SKTexture *punch4 = [SKTexture textureWithImageNamed:@"punch4"];
SKTexture *punch5 = [SKTexture textureWithImageNamed:@"punch5"];
NSArray *animationObjects = [NSArray arrayWithObjects:punch1, punch2, punch3, punch4, punch5, nil];
SKAction *punch = [SKAction animateWithTextures:animationObjects timePerFrame:0.1];
[_tusk runAction:punch withKey:@"punch"];
}
我的碰撞代表看起来像这样
- (void)didBeginContact:(SKPhysicsContact *)contact
{
if([_tusk actionForKey:@"punch"]) {
NSLog(@"DAT HIT");
}
}
我的问题是让didBeginContact记录命中的唯一方法是在第一次接触其他单位时进行打击。我知道它很容易理解,因为方法名称上写着“didBeginContact”,但我需要在这个和另一个“didEndContact”之间找到一些东西,因为当我站在他们旁边时,我希望能够打击这些人:)
答案 0 :(得分:2)
如果你的手套和(被打的东西)都是物理机构的精灵,你必须设置他们的碰撞类别,你的didBeginContact看起来更像:
- (void)didBeginContact:(SKPhysicsContact *)contact{
SKPhysicsBody *firstBody, *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
{
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}
else
{
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if (firstBody.categoryBitMask==gloveCategory && secondBody.categoryBitMask == monsterCategory)
{
NSLog(@"DAT HIT");
}
}