2012-02-14 118 views
0

我正在使用OpenGL製作iPhone遊戲。當我開始編寫遊戲控件的界面時,我遇到了一個問題。我有四個按鈕(左,右,攻擊,跳躍),我需要能夠同時按下。我需要的就像一個功能touches文字(只有touchesBegin,Moved和End)。我需要一個函數返回當前屏幕上的所有手指(與當前階段無關),但這些函數僅在開始按下,當我移動手指或擡起手指時纔會返回......沒有用於當手指保持原位時按下按鈕。在iPhone上處理多點觸控

我試着用touchesBegin,touchesMoved和touchesEnd編寫代碼,但是其中一個函數返回的指令列表與其他函數不同,所以它將所有東西都擰緊,多點觸控變得不可能。

理想的功能會返回當前屏幕上的所有手指,然後我可以遍歷所有的手指,檢查它們的位置是否與某個按鈕的位置匹配,然後激活該按鈕。我怎樣才能做到這一點?

回答

0

你基本上是在談論實現一大塊基於觸摸的GUI功能,帶來了所有的複雜性。你將不得不實現一個小型狀態機來跟蹤每個按鈕的狀態。例如,一個按鈕以「未按下」狀態開始。如果您在按鈕內檢測到觸摸,它將轉換到「按下」狀態。當觸摸移動(或結束,或取消)時,檢查按鈕是否仍然包含觸摸。如果沒有,則轉換回「未按下」狀態。您的遊戲循環可以檢查按鈕的狀態並相應地生成事件(例如,某些按鈕可能需要在按下時連續生成事件,而其他按鈕在釋放時會生成單次事件)。

+0

但問題是部分「檢查按鈕是否仍然包含觸摸」。我怎樣才能做到這一點?我找不到任何功能。我只在接觸開始,移動或結束時收到事件。如果用戶在不移動的情況下按住按鈕,則不會被注意到。這就是我需要的,來檢查某個位置是否有觸摸。 – HLorenzi 2012-02-15 02:05:50

+0

如果在按鈕內部有觸摸(由於touchesBegan/Moved調用而檢測到),並且此後沒有收到任何觸摸移動/結束/取消:表示沒有觸摸的調用在按鈕內。你*有*爲每個按鈕存儲一個額外的值(可能是一個名爲'isPressed'的布爾值),這樣你就可以查詢觸摸事件之間當前狀態的按鈕。通過存儲按鈕狀態,您可以獲得一段不依賴觸摸回調的持久信息。 – warrenm 2012-02-15 18:31:16

+0

是的,我爲每個按鈕都存儲isPressed。但是由於多點觸控功能而出現問題。我無法跟蹤某些touchesMoved事件是否與某些touchesBegin事件是同一根手指,因此,例如,無法知道用戶是否將他的手指在屏幕上移動並停在第二個按鈕上而沒有按下第一個按鈕 - 因爲在這種情況下沒有touchesEnded,並且無法知道移動的手指是否與按下第一個按鈕的手指相同(所以我可以解壓縮它)。這有點難以解釋...... – HLorenzi 2012-02-16 02:23:01