2013-03-10 195 views
1

我正在使用加速度計控制角色的遊戲。我的問題是:我需要使用OnSensorChanged()中無法訪問的類和方法中傳感器接收的值。我相信我需要在OnSensorChanged中實現回調,但我不知道該怎麼做。誰能幫我嗎?Android加速度計問題

+0

我們可以看到一些代碼嗎? – Geobits 2013-03-10 20:38:28

+0

嗯,我只是將SensorListener註冊到我的加速計類中,並且在該類中有OnSensorChanged。這幾乎是我的所有代碼,因爲沒有其他工作。我得到我的加速度計值很好,但我似乎無法拿走它們並將它們保存到變量中。這就是我真正想做的事情,但變量總是隻存在於OnSensorChanged內部。如果我能保存這些價值觀,我就不會有更多的問題。 – vulgarknight 2013-03-10 20:48:06

+0

爲什麼你不能定義一個類成員來保存由onSensorChanged傳遞的值。 – 2013-03-10 21:16:08

回答

0

我相信在這篇文章(How to Define Callbacks in Android?)的答案會幫助你。

總之,創建回調接口:

// The callback interface 
interface MyCallback { 
    void callbackCall(SensorEvent event); 
} 

實現的回調中是應該做計算類的接口:

class Callback implements MyCallback { 
    void callbackCall(SensorEvent event) { 
     // callback code goes here 
    } 
} 

從你的活動,你必須讓通話onSensoreChanged():

// The class that takes the callback 
class Worker extends Activity implements SensorEventListener { 
    MyCallback callback; 

    public void onSensorChanged(SensorEvent event) { 

     callback.callbackCall(event); 
    } 
} 

我希望這有助於。

UPDATE:

我假設你已經知道進程和線程(如果沒有,請看看Android的文檔約Processes and Threads)。

onSensorChanged方法是一個I/O,在單獨的線程(而不是主UI線程)中執行I/O操作是一種很好的做法。

調用回調方法後,可以將事件存儲在另一個變量中,並使用該類中的那些局部變量。

由於您正在編寫遊戲,因此您的應用不太可能需要每一個事件。因此,當應用程序忙於計算遊戲數據時,其他事件可能會被丟棄。你可以通過設置一個「繁忙」標誌(布爾值)並在這個if塊中包含計算代碼。

void callbackCall(SensorEvent event) { 
     if (!busy) { 
      // Set the busy flag to block other event changes 
      busy = true; 
      // callback code goes here 

      // Once finished, reset the busy flag to allow other events to come in 
      busy = false; 
     } 
    } 
+0

因此,如果我想在一個類中使用我的字符X和Y座標,並且在另一個類中使用加速度計sensorlistener,則會調用OnSensorChanged中的回調函數,但是如何在其他類中存在event.values修改座標?那麼一旦從處理玩家位置的類中調用另一種方法,這些值是否會被拋出? – vulgarknight 2013-03-10 21:14:20

+0

我已更新上述答案,以回答您的問題。 – Armin 2013-03-10 21:39:25

+0

好的,所以回調在類的同一個線程上調用它?所以當回調爲變量賦值時,該變量在該類中是持久的? – vulgarknight 2013-03-10 21:47:20