当前位置: 首页 > 知识库问答 >
问题:

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

淳于熙云
2023-03-14

我在雪碧套装里做一个复古街机游戏。我是这个框架的新手,所以我每分钟都发现新的东西,但很难解决这个问题,我在过去的几个小时里一直试图解决这个问题。

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

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个答案

阮鸿煊
2023-03-14

如果你的手套和(被击打的物体)都是具有物理实体的精灵,你必须设置它们的碰撞类别,你的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");
}

}

 类似资料:
  • 我是IOS开发的新手,目前在didBeginContact方法中遇到一些sprite工具包冲突问题。 如果一个碰撞的物理物体被移走了,我如何摆脱或者停止didBeginContact的运行?例:一颗子弹与两个重叠的敌人相撞。因为子弹击中第一个敌人并被摧毁,所以在第二个敌人上运行的碰撞检查抛出异常,因为子弹不再存在。 我试过检查nil和NSNULL值,但运气不好。我收到的错误代码是“线程1:EXC_

  • 我已经寻找并找到了单个碰撞的答案,但我正在寻找一种检测多种类型的碰撞的方法。我正在制作一个游戏,其中有3个我想要的碰撞。用户飞机与敌方子弹相撞,用户子弹与敌机相撞(我已经工作过),敌方子弹与用户子弹相撞。我已经设置并更正了所有类别BitMask和contactTestBitMask。这是我的委托方法。

  • 我正在使用Sprite Kit中的碰撞检测。它在起作用,防止我的精灵穿越路径。然而,我在didBeginContact中没有收到通知:而且我似乎无法控制物理引擎在发生碰撞时的响应。 我让各种汽车(SKSpriteNodes)使用SKAction followPath沿着以下路径行驶:as offset:oriento path:duration: 以前,如果两辆车相交,它们都会像往常一样继续行驶,

  • 这就是正在发生的事情,游戏不断停止,因为两个圆圈相互碰撞,我正在尝试通过确保ID是正方形ID来防止这种情况,我试图让圆圈碰撞在一起,而忽略碰撞,但它没有这样做,我不知道如何确切地阻止它相互碰撞,只允许它与正方形碰撞。 基本上我想阻止这个圆与另一个圆碰撞,并允许它与正方形碰撞。 任何帮助都会很好谢谢 游戏引擎引擎类 这是我在扩展game.engine.engine包的game类中检查冲突的地方。 游

  • 刚开始在pygame中的精灵碰撞。运行此代码时,会弹出一个属性错误,指出“组”对象没有属性 “rect”。我不知道为什么会发生此错误。建议?

  • 我在PyGame中创建了两个简单的精灵,其中一个是雨伞,另一个是雨滴。雨滴被添加到一个名为< code>all_sprites的sprite组中。伞精灵有自己的组,名为< code>Umbrella_sprite 雨滴从屏幕顶部“落下”,如果其中一个碰到雨伞/与雨伞碰撞..雨滴应该被删除了。但是除了特定雨滴之外,所有其他雨滴都受此影响。