레이블이 accelerometer인 게시물을 표시합니다. 모든 게시물 표시
레이블이 accelerometer인 게시물을 표시합니다. 모든 게시물 표시

2010년 4월 27일 화요일

[android]Snake 게임을 Accelerometer로 하기

android 예제 중에 Snake 게임이 있습니다.




















방향 키로 snake를 욺직일 수 있는데 이번에는 Accelerometer 센서로 snake를 조종할 수 있도록 수정 해 보겠습니다.

protected void initAccelator() {
SensorManager sensorManager = (SensorManager)getContext().getSystemService(Context.SENSOR_SERVICE);
Sensor mSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
SensorEventListener sel = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;

if (java.lang.Math.abs(values[0]) - java.lang.Math.abs(values[1]) > 0) {
if (values[0] <>
if (mDirection != WEST) {
mNextDirection = EAST;
}
} else if (values[0] >= 0) {
if (mDirection != EAST) {
mNextDirection = WEST;
}
}
} else {
if (values[1] <>
if (mDirection != SOUTH) {
mNextDirection = NORTH;
}
} else if (values[1] >= 0) {
if (mDirection != NORTH) {
mNextDirection = SOUTH;
}
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
sensorManager.registerListener(sel, mSensor, SensorManager.SENSOR_DELAY_GAME);
}

위에 함수를 SnakeView에 추가 후 생성자에서 호출합니다.

event.values에서 values[0]이 x축 이고 [1]이 y축 [2]가 z축입니다.
x축과 y 축이 동시에 계속 발생 하기 때문에 좌,우,위,아래 중 하나를 선택하기 위해 x축과 y축 중에 값이 더 큰 쭉으로 선택하도록 하고 축의 방향은 음수인지 양수인지 판단 하시면 됩니다.