2012-01-12 73 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