2 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
我認(rèn)為您可以嘗試通過(guò)這種方式獲得解決方案。
使用 Handler 會(huì)增加一個(gè)時(shí)間延遲,并且對(duì)于多個(gè) senson 響應(yīng),它只會(huì)對(duì)最后一個(gè)滿足的條件采取行動(dòng),并且 previoulsy 調(diào)用一次將從回調(diào)中刪除。
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
public void run() {
// roll dice
}
};
private final SensorEventListener sensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float x = sensorEvent.values[0];
float y = sensorEvent.values[1];
float z = sensorEvent.values[2];
acelLast = acelVal;
acelVal = (float) Math.sqrt((double) (x*x + y*y + z*z));
float delta = acelVal - acelLast;
shake = shake * 0.9f + delta;
if (shake > 12) {
try {
handler.removeCallbacks(runnable);
handler.postDelayed(runnable, 1000);
} catch(Exception e) {
e.printStackTrace();
}
}
}
@override
public void onStop() {
super.onStop();
handler.removeCallbacks(runnable);
}
如果您需要來(lái)自傳感器的任何東西,您可以刪除一個(gè)類變量并在條件中更新它if (shake > 12),以便可以在可運(yùn)行的環(huán)境中使用。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
通過(guò)添加一個(gè)布爾值“rolled”,并在擲骰子時(shí)將其設(shè)置為真,您只能擲一次骰子。您可以通過(guò)將值設(shè)置回 false 來(lái)再次滾動(dòng)。
private static boolean rolled = false;
private final SensorEventListener sensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float x = sensorEvent.values[0];
float y = sensorEvent.values[1];
float z = sensorEvent.values[2];
acelLast = acelVal;
acelVal = (float) Math.sqrt((double) (x*x + y*y + z*z));
float delta = acelVal - acelLast;
shake = shake * 0.9f + delta;
if (shake > 12 && !rolled) {
// roll dice
rolled = true;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
添加回答
舉報(bào)