Ios 精灵套件物理-碰撞时的错误行为

Ios 精灵套件物理-碰撞时的错误行为,ios,sprite,Ios,Sprite,我正在制作一款精灵套装的复古街机游戏。我不熟悉这个框架,所以我每分钟都会发现新的东西,但解决这个问题却很困难,我在过去的几个小时里一直在努力解决这个问题 首先是一个游戏的屏幕转储和红色勾勒出的物理实体 当你按下拳击手套按钮时,大个子用这种方法进行拳击 -(void)performPunch { SKTexture *punch1 = [SKTexture textureWithImageNamed:@"punch1"]; SKTexture *punch2 = [SKTexture textu

我正在制作一款精灵套装的复古街机游戏。我不熟悉这个框架,所以我每分钟都会发现新的东西,但解决这个问题却很困难,我在过去的几个小时里一直在努力解决这个问题

首先是一个游戏的屏幕转储和红色勾勒出的物理实体

当你按下拳击手套按钮时,大个子用这种方法进行拳击

-(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”之间做点什么,因为我想在我站在他们旁边的时候能够打他们:)

如果你的手套和(被打的东西)都是有物理身体的精灵,您必须设置它们的碰撞类别,您的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");
}
-(void)didBeginContact:(skphysiccontact*)联系人{
SKPhysicsBody*第一个Body,*第二个Body;
if(contact.bodyA.categoryBitMask

}

我需要更好地了解您想要做什么。您是否希望仅当两个角色的物理实体相互接触时,冲头才计数?在这次接触中,所有的拳都算吗?或者,即使角色的物理身体可能没有接触,当角色的拳头似乎接触到另一个角色时,您是否希望拳头计数?