강아지가 앞으로가면서 맵을 이동하여 목적지 까지 가는 어드벤쳐 게임을 개발을 하고 있습니다.

강아지가 달리는 것은 쓰레드를 통해 구현을 했습니다.

하지만 가운데 키를 누르면 점프하는 모습과 아무키도 건들지 않으면 멈춰있는모습등을 구현하고싶습니다..

현재는 계속 달리는 모습만 하고 있습니다. 반대키를 눌러도 방향을 바꾸지 않고 계속 한방향만 쳐다보며 뒤로 달리네요..;;;;.(반대방향 이미지도 추가했습니다.) 

멈춰있는 모습이라던가 아니면 점프하는 이미지는 다 만들어 놨습니다.

그런데 어떻게 넣어야 될지 모르겠네요...

리소스에 추가를 한다음 어떻게 키에 적용시키는지 가르쳐주시면감사하겠습니다.

게임앱 개발 고수분들 답변 부탁드립니다...

아래는 소스입니다..


package com.paad.sandyadventures;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;

public class GameView1 extends SurfaceView implements Callback {


 class ImgThread extends Thread{
  private Bitmap mImgBack;
  private Drawable mMainImage[] = new Drawable[2];
  private int cnt1 = 0;
  private SurfaceHolder mSurfaceHolder;
  private int ypos;
  private int xpos;
  
  public ImgThread( SurfaceHolder surfaceHolder, Context context){
   mSurfaceHolder = surfaceHolder;
   Resources res = context.getResources();
   
   mImgBack = BitmapFactory.decodeResource( res, R.drawable.map1background);
   mMainImage[0] = res.getDrawable(R.drawable.sandyrun3);
   mMainImage[1] = res.getDrawable(R.drawable.sandyrun4);
  }
  
  public void run() {
   while (true) {
    Canvas canvas = null;
    try {
     canvas = mSurfaceHolder.lockCanvas(null);
     synchronized (mSurfaceHolder) {
      canvas.drawBitmap(mImgBack, 0,0, null);
      cnt1++;
      mMainImage[cnt1%2].setBounds(150+xpos, 100+ypos, 150+xpos+75, 100+ypos+40);
      mMainImage[cnt1%2].draw(canvas);
      sleep(100);
     }
    } catch (InterruptedException e) {
     e.printStackTrace();
    } finally {
     if (canvas !=null) {
      mSurfaceHolder.unlockCanvasAndPost(canvas);
     }
    }
   }
  }

     void setXPos(int val) {
   // TODO Auto-generated method stub
       xpos += val;  
  }

   void setYPos(int val) {
   // TODO Auto-generated method stub
    ypos += val;
  }
 }
 private ImgThread thread;

 public GameView1(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
  SurfaceHolder holder1 = getHolder();
  holder1.addCallback(this);
 
  thread = new ImgThread(holder1, context);
  setFocusable(true);
 }
 
 @Override
 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
  // TODO Auto-generated method stub

 }

 @Override
 public void surfaceCreated(SurfaceHolder holder) {
  // TODO Auto-generated method stub
        thread.start();
 }

 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {
  // TODO Auto-generated method stub
    boolean retry = true;
    while (retry) {
     try {
      thread.join();
      retry = false;
     } catch (InterruptedException e) {
     }
    }
 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT)
   thread.setXPos(-10);
  else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)
   thread.setXPos(10);
  else if (keyCode == KeyEvent.KEYCODE_DPAD_UP)
   thread.setYPos(-10);
  else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN)
   thread.setYPos(10);
  return super.onKeyDown(keyCode, event);
 }

}

여기서 어떻게 건드려야 될지 모르겠어요...

답변 부탁드립니다...afgeweyeyad.jpg