마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SurfaceView와 SensorEventListener

0 추천
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를 구성해야 할까요? 센서이용 하지않고 가만히 뜨우는건 되는데 이동하려고 센서만 넣으면 실행이 안되네요 ㅠㅜ
라대 (200 포인트) 님이 2013년 11월 8일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...