【问题标题】:How to make buttons (Corona SDK) from graphics with arbitrary shape?如何从任意形状的图形制作按钮(Corona SDK)?
【发布时间】:2012-01-12 12:35:06
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: events button touch coronasdk


    【解决方案1】:

    这不是自动的,但您可以尝试以下解决方案,其中涉及一些设置和代码。应该不会太难。

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

    使用每个浅蓝色矩形底部的 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 的身份访问该表。

    【讨论】:

    • 感谢 JeffK 的建议。但是我希望避免这样的解决方案,因为这将意味着创建表的手工劳动。目的是在我的应用程序中拥有像上面那样的 40 座山脉的某个地方,并具有相当大的尺寸。恐怕这可能是对 Ansca 的另一项功能要求。但我敢肯定他们以前听过。
    【解决方案2】:

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

    【讨论】:

    • 这可行。但是我也需要平坦的部分(平原/山脊),所以问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2012-05-03
    相关资源
    最近更新 更多