제목 그대로 그래픽을 처리하는 클래스를 만들자.

이 역시 AppManager클래스처럼 래픽 로직을 한땀한땀 따로 짜지 않고 편리하게 관리하기 위함이다.

public class GraphicObject {

private Bitmap m_bitmap;

private int m_x;

private int m_y;

public GraphicObject(Bitmap _bitmap){

m_bitmap = _bitmap;

m_x=0;

m_y=0;

}

public void Draw(Canvas canvas){

canvas.drawBitmap(m_bitmap, m_y, m_y, null);

}

}


사용할때는 이렇게 사용하면 됀다.

GraphicObject obj;

obj = new GraphicObject(비트맵데이터);

obj.draw(canvas);


그럼 적용해 보도록 하겠다.

public class GameView extends SurfaceView implements SurfaceHolder.Callback {

private GameViewThread m_thread;

private IState m_state;

private GraphicObject m_Image; //그래픽오브젝트로 추가

public GameView(Context context){

super(context);

setFocusable(true);

AppManager.getInstance().setGameView(this);

AppManager.getInstance().setResource(getResources());

getHolder().addCallback(this);

m_thread = new GameViewThread(getHolder(), this);

//그래픽오브젝트로 추가

m_Image = new GraphicObject(AppManager.getInstance().getBitmap(R.drawable.background));

ChangeGameState(new IntroState());

}

.....(생략)

@Override

public void onDraw(Canvas canvas){

canvas.drawColor(Color.WHITE);

m_state.Render(canvas); //????

m_Image.Draw(canvas);//그래픽 오브젝트로 추가

}

    .....(생략)

}

이미 이전의 코드들과 OnDraw()가 중복되는 부분이 있어서 다소 문제가 있는 코드이지만 일단 저렇게 추가해두면

지정한 이미지를 출력할 수 있다.

그런데 아마 저렇게 OnDraw가 중복되는 현상이 맞을거다..

앞으로 다양한 이미지를 중첩시켜서 그려야하기 때문이니까.

행여라도 나중에 문제가 생기면 해결책을 찾도록 노력해보겠다.


더불어 게임이라는게 위치정보를 받아서 처리할 필요가 있으므로

GraphicObject클래스에 다음과 같은 메소드를 추가하도록 하겠다.

언제나 등장하는 그 set()과 get()이다..

public class GraphicObject {

....(생략)

public void setPosition(int x, int y){

m_x = x;

m_y = y;

}

public int GetX(){

return m_x;

}

public int GetY(){

return m_y;

}

}


,