2015-03-24 100 views
1

我希望你们都可以提供帮助。我正在研究一款棋盘游戏的应用程序。我有六角形的瓷砖,这些瓷砖在游戏开始时随机调用。这些瓷砖中的每一个都具有值为1的四条边,并且其他两条边的值为2和3.如何检测其他SKSpriteNodes的子节点的相交节点

每个瓷砖是在边缘上具有透明矩形节点的SKSpriteNode。有5种不同类型的瓷砖,他们需要与子节点分开的子画面,因为除了随机布局外,他们的区域也随机旋转。所以我需要以编程方式知道哪些瓦片边缘触及其他瓦片的哪些边缘。

像这样:

https://app.box.com/s/nnym97st3xmrsx979zchowdq1qwsmpoo

(我试过后的什么,我试图完成的图像,但显然我没有足够高的评级。); - )

例如:当然只有具有动态,移动物体作品如果“2”被触摸“3”等

我第一次尝试碰撞检测,但是。

我尝试了一个IF语句来比较其他节点是否正在触摸,然后记住父节点特定的坐标,以至于无法正常工作。

然后我尝试intersectsNode,但似乎只适用于同一父母下的节点。 我目前正在与convertPoint,以获得匹配场景的坐标,从而具有可比性。但我似乎无法按我需要的方式工作。

必须有一些简单的东西,我没有看到。有任何想法吗?

回答

0

当然不简单。

一个解决方案是开始你所有的形状彼此稍微间隔。将不可见的子节点与物理实体一起添加到所有六面,并根据其等级(1,2或3)给每个物理实体一个合适的分类。

当你开始游戏时,通过使用你喜欢的任何移动方法将所有的外层节点移动到适当的位置(两侧接触)。当每个十六边接触另一个时,这会给你联系消息。联系人信息会告诉你哪边号码正在接触其邻居。

这一思想的具体编码取决于当前的代码,游戏等...

enter image description here

+0

有趣。我确实尝试了一些类似的方法,让子节点在加载时只移动几个像素,但没有产生任何结果。初始放置时节点已经重叠,可否阻止碰撞检测?如果是这样,我可以通过调整你的方法来调整它,并简单地让子节点从十六进制的中心移动到外边缘。这可能比必须自己移动所有格子更容易。非常感谢你!我会在早上做一个测试。 ;-) – Freedlun 2015-03-26 02:31:33

+0

@Freedlun - 移动格子并不难。如果你知道每一个的结束位置,你可以使用SKAction moveTo x,y over duration。一起运动的格子甚至可以让你的游戏看起来很酷的启动动画。 – sangony 2015-03-26 12:42:03

+0

确实如此。其实这正是我所做的,尽管我是用childern做的。使用SKActions我将Edge sprites从(0,0)移动到它们的位置,它完美地工作!联系被检测到。现在我可以继续讨论游戏的其他方面。非常感谢! – Freedlun 2015-03-26 14:11:28

相关问题