2014-11-21 79 views
1

我正在构建一个2D游戏使用SpriteKit,这就是我想实现的。SpriteKit中的“碰撞映射”

想象一下垂直滚动SKSpriteNode代表一栋高楼。建筑物使用简单的图像来表现,并且具有0123'(iOS 8引入)的物理机构,因此它紧密跟随建筑物的路径。

该建筑的一些部分是特殊的。碰撞这些部分应该产生一个特殊的碰撞行为。例如,触摸建筑物的墙壁将触发动作1,但触摸任何窗口将触发动作2

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

我正在考虑为每个建筑物的精灵图像制作一些“碰撞图”,这些图像基本上是一个透明的图像,其中包含非透明块,用于确定建筑物的可碰撞部分。 (:建筑图像,右:碰撞地图图像左):以下所示的简单的例子

Building image Collision map image

这种方法的问题是,像上面的一个“碰撞地图”图像设置SKPhysicsBody时,身体并不适用于所有的方块,而是只包围其中一个单独的方块。换句话说:一个物理体可以应用于图像中只有一个连续的块。

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

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

预先感谢您。

回答

1

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

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

+0

感谢您张贴您的想法。一个问题:我将如何能够确定与特殊区域的碰撞? – damirstuhec 2014-11-23 21:58:41

+0

您可以定义两个不同的碰撞类别并区分:func didBeginContact(contact:SKPhysicsContact)let category = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask if category == collisionExtraCategory | collisionShipCategory ||类别== collisionExtraCategory | collisionShieldCategory { – Stefan 2014-11-23 22:06:16

+0

抱歉。注释中的代码格式不是真的可行。这个想法是,两个精灵都有不同的类别。在didBeginContact里面,您可以检查是否发生了与精灵A或B的碰撞。 – Stefan 2014-11-23 22:09:59