【问题标题】:"Collision Map" in SpriteKit [closed]SpriteKit 中的“碰撞图”[关闭]
【发布时间】:2014-11-21 19:13:37
【问题描述】:

我正在使用SpriteKit 构建一个2D 游戏,这就是我想要实现的目标。

想象一个垂直滚动的SKSpriteNode,它代表一座高楼。建筑物使用简单的图像表示,并具有设置为+ (SKPhysicsBody *)bodyWithTexture:(SKTexture*)texture size:(CGSize)size;(iOS 8 引入)的物理主体,因此它紧跟建筑物的路径。

建筑物的某些部分很特别。与这些部分碰撞应该会产生特殊的碰撞动作。例如,触摸建筑物的墙壁会触发 action 1,但触摸任何窗户都会触发 action 2

我无法以某种方式定义建筑物的那些“特殊块”。

我正在考虑为建筑物的每个精灵图像制作某种“碰撞图”,它基本上是一个透明图像,其中不透明的块确定建筑物的可碰撞部分。简单示例如下所示(左:建筑图像,右:碰撞图图像):

这种方法的问题在于,当在上面的“碰撞图”图像上设置SKPhysicsBody 时,主体不会应用于所有块,而是仅环绕其中一个单独的块。换句话说:一个物理体只能应用于图像中的一个连续块。

最后,我想知道您在确定非连续碰撞贴图时使用的是哪种方法。

P.s.:建筑物的SKSpriteNode 由多个独特的纹理图像表示,这些图像一个接一个地垂直滚动。

提前谢谢你。

【问题讨论】:

    标签: ios ios8 sprite-kit 2d-games skspritenode


    【解决方案1】:

    只是一个想法: 你不能为建筑物使用两个位于同一个地方的精灵吗: - 一个代表建筑物的物理主体(图像中的左侧) - 反转您的碰撞图图像以获得单个物理体块。特殊区域应与非特殊区域重叠一个像素

    希望你明白我的意思。这只是一个想法

    【讨论】:

    • 感谢您发布您的想法。一个问题:如何确定与特殊区域的碰撞?
    • 您可以定义两个不同的碰撞类别并区分内部: func didBeginContact(contact: SKPhysicsContact) { let category = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask if category == collisionExtraCategory |碰撞船舶类别 ||类别 == 碰撞额外类别 |碰撞防护类别 {
    • 对不起。注释中的代码格式实际上是不可能的。这个想法是两个精灵都有不同的类别。在 didBeginContact 内部,您可以检查是否与精灵 A 或 B 发生碰撞。
    • 谢谢!我能够根据您的想法找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多