Sprite Kit Physics - 碰撞时的错误行为

时间:2014-02-25 15:23:34

标签: ios sprite

我正在使用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”之间找到一些东西,因为当我站在他们旁边时,我希望能够打击这些人:)

1 个答案:

答案 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");
}

}