2012-01-12 46 views
0

我在我的游戏中有一座山的轮廓,需要Corona能够辨别用户在山上按下(触摸事件)和按压山峰之间的山谷(用于创建形状的Alpha通道)。 Corona似乎将这种意义上的显示对象视为一个矩形,因此我的任何手段都无法满足我的需求。如何从任意形状的图形制作按钮(Corona SDK)?

但是,Corona物理功能允许您创建复杂的多边形来模拟任意形状的碰撞处理,但我没有发现类似的按钮方法。

任何想法?

回答

0

这不是自动的,但这里有一个解决方案,你可以尝试一下,包括一些设置和代码。不应该太困难。

通过检查event.xevent.y参数来测试触摸在事件侦听器中的位置。您可以通过创建一个表格来获得这种效率,该表格包含每个条带的最左侧x和最右侧x值,例如从对象的顶部到底部10个像素。例如,考虑这山:

enter image description here

使用每个光蓝色矩形作为索引到表的底部的y坐标,和左x和右侧y值加载到该条目,例如:

hitTable[120] = {245,260} 
hitTable[130] = {230,275} 

等等...

然后,在触摸事件侦听器,迫使event.y参数到表的指标之一,无论是与函数或只是测试,看看哪个是最接近。然后,使用该表项,查看event.x是否在您为该y坐标指定的x个坐标之间。如果不是,只需忽略触摸。

你甚至可以创建表并将其指定为这样的图像本身的属性:

hitTable = {} 
hitTable[120] = {245,260} 
hitTable[130] = {230,275} 
... and so on, then ... 
myMountain.hitTable = hitTable 

一旦你做到了这一点,你可以在触摸事件监听器访问该表作为event.target.hitTable

+0

谢谢你的建议杰夫。但是我希望避免这样的解决方案,因为这意味着需要手工来创建表。其目的是在我的应用程序中,沿着像上述那样的40个山脉线的某处具有相当大的尺寸。恐怕这可能是Ansca的另一个功能要求。但我确定他们之前听说过。 – Amoxus 2012-01-12 23:13:13

0

您可以用90度角尖创建山峰吗?然后,如果你将山峰分开并旋转45度,它们就会适合方形。一旦你导出它们,你将它们导入Corona,然后将它们旋转45度。我没有测试过这个,但我想像它可能会工作:)

+1

这可以工作。不过,我也需要平坦部分(平原/山脊),所以问题依然存在。 – Amoxus 2012-08-30 14:03:20