【问题标题】:Spritekit - Collision approach when touch beginsSpritekit - 触摸开始时的碰撞方法
【发布时间】:2015-04-09 09:36:41
【问题描述】:

我是 Swift 和 SpriteKit 的初学者,我正在开发一款基本游戏。我使用 2 个 SKTexture 图像创建了一个 Sprite 游戏角色(Sapceman)。当屏幕被触摸时,Sprite 图像从一个纹理图像变为另一个(Jet Pack Fires),并且 Sprite 在屏幕周围移动。我想设置一个碰撞检测(使用 Alien Spite),将它们从屏幕上移除,但仅在触摸屏幕并显示第二个纹理图像并且仅用于精灵的底部(即当人触摸屏幕时)并且JetPack被解雇了我希望火部分“杀死”外星人)。感谢任何人对此提出任何建议

【问题讨论】:

  • 所以基本上你想在火球击中外星人时得到通知。对吧?
  • 嗯,是的,目前火球只是 Sprite 图像(第二个纹理图像)的一部分。我在想我可能需要创建一个在 Touch Begins 时显示的新 Sprite 并将其附加到现有 Sprite 并在此设置碰撞,但不确定这是否可能

标签: ios swift sprite-kit collision


【解决方案1】:

试试这个代码

 static const uint32_t fireBallCategory   = 0x1;     
 static const uint32_t alienCategory  = 0x1 << 1;

在添加火球和外星人方法中添加这个,

   fireBall.physicsBody.categoryBitMask = fireBallCategory;         
  alien.physicsBody.categoryBitMask = alienCategory;
  fireBall.physicsBody.contactTestBitMask = alienCategory;

通过这样做,当火球和外星人相遇时,您会收到通知。因此,在此之后,您必须添加逻辑以在委托方法中隐藏外星人。所以首先将自己设置为联系人代表。在 -(id)initWithSize:(CGSize)size 方法中添加这一行。

 self.physicsWorld.contactDelegate = self;

如下实现联系委托,

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    SKPhysicsBody *notFireBall;

    if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask){
    notFireBall = contact.bodyB;
} else {
    notFireBall = contact.bodyA;
}
[notFireBall removeFromParent];      
}

【讨论】:

  • 您好,是的,我的联系人正在工作,并且在建立联系时外星人会被移除。我想我试图通过仅在显示特定图像纹理时检测碰撞来使其过于复杂,所以我决定改变方法,而是从 Spaceman 发射射弹(火球)并在此处设置碰撞,这将实现什么我想。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多