sprite-kit - 如何检测物理体不同区域的接触

标签 sprite-kit skphysicsbody

我想在 Sprite 套件游戏中实现经典的“爆头”效果。

我的想法和尝试:

  1. 在同一个 Sprite 上创建单独的“ body ”和“头部”物理物体,并用关节固定它们。不可能的:(

  2. 在“敌人” Sprite 上创建一个“ body ”物理体,并创建另一个透明 Sprite ,其“头部”物理体跟随 body (位于顶部)。这种方法要求我跟踪哪个头部与哪个 body 相关联。这也会降低游戏效率。我很好奇是否可以创建 SKSpriteNode 的子类并创建一个将这两个 spritenode 和物理物体捆绑在一起的“敌人”。

  3. 检查射弹相对于敌人的位置,看看射弹是否在 Sprite 顶部的特定 Y 范围内发生接触。我相信这会效率低下,因为射弹飞行得非常快。

如果有人创造了这种效果并可以分享他们的知识,我将不胜感激。谢谢!

最佳答案

我在很多地方使用这个设置。如果您发现自己想要添加更多零件或武器,它可以很好地扩展,并且它可以让您在视觉上轻松隐藏任何这些零件或武器。如果你有很多事情发生并且不同的敌人有不同的“东西”,或者你正在做一些疯狂的事情,比如根据游戏玩法将子 Sprite 养育给不同的实体等,那么 userData 的使用会派上用场。

-(SKSpriteNode*)makeAnEnemy
{

    SKSpriteNode *mainEnemy;
    SKSpriteNode *enemyHead;
    //setup mainEnemy physics body
    //setup enemyHead physics body
    [mainEnemy addChild:enemyHead];

    // depending on your plans, on hit you could use the following code later:
    SKSpriteNode *theEnemyThatWasHit = (SKSpriteNode*)enemyHead.parent;

    //or you can use userdata and set it all up here
    [mainEnemy.userData setObject:enemyHead forKey:@"myHead"];
    [enemyHead.userData setObject:mainEnemy forKey:@"myBody"];

    return mainEnemy;
}

关于sprite-kit - 如何检测物理体不同区域的接触,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24637025/

相关文章:

ios - 创建通过 "turn circle"将玩家从当前位置移动到新位置的路径

ios - 如何制作这样的东西?

ios - Sprite Kit,灰色背景而不是图像

ios - 如何对齐 SKPhysicsBody 和 SKShapeNode?

swift - SKSpriteNode放置后位置变化

swift - SpriteKit 瓦片 map 不加载瓦片

swift - iOS Swift didBeginContact 未被调用

swift - 如何在保持重力的同时保持 spritekit 节点中的能量恒定

ios - SKAction moveTo 在应该下降时上升