extends View 를 통해서 이미지를 그려서 슈팅게임을 만들려고 하다가
SensorEventListener 로 기울기값을 통한 슈팅게임 기반을 만들었 습니다.
public GameView(Context context) {
super(context);
m_Player1 = BitmapFactory.decodeResource(getResources(), R.drawable.a_1, null);
m_sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
m_sensorManager.registerListener(this, m_sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_FASTEST);
}
public void onDraw(Canvas canvas) {
canvas.rotate((float)r, m_x+22, m_y+22);
canvas.drawBitmap(m_Player1, null, new Rect(m_x, m_y, m_x+47, m_y+47), null);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
public double atan2(double x, double y){
double r = Math.atan2(y, x)*180/PI;
return r;
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
synchronized(this) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ORIENTATION:
if(Heading != event.values[0] || Pitch != event.values[1] || Roll != event.values[2]) {
Heading = event.values[0];
Pitch = event.values[1];
Roll = event.values[2];
old_m_x = m_x;
old_m_y = m_y;
m_x -= Roll/2;
m_y -= Pitch/2;
r = atan2(m_x - old_m_x, m_y - old_m_y);
if(m_x <= 0) m_x = 0;
if(m_x >= getWidth()-86) m_x = getWidth()-86;
if(m_y <= 0) m_y = 0;
if(m_y >= getHeight()-86) m_y = getHeight()-86;
}
break;
}
}
invalidate();
}
대강 이런 소스입니다. 이렇게 하고나니 슈팅게임 기반에 효율이 좋은 surfaceview로 바꿔서 다시 만들어 가려는데요
이상하게 SurfaceView로 넘거가면 이 센서값을 못읽는지 띄지가 않습니다.
어떻게 SurfaceView를 구성해야 할까요? 센서이용 하지않고 가만히 뜨우는건 되는데 이동하려고 센서만 넣으면 실행이 안되네요 ㅠㅜ