surfaceview 를 이용해서 세균전을 말들고 있는데요

세균전 특성상 세균을 배치 하면 그 주변의 다른 세균은 자기편으로 만드는 건데

그것을 계산을 하고 세균이 퍼지는 애니메이션 효과를 주고 싶습니다.

현재 애니메이션 효과를 주고 부터 주변의 세균이 색이 늦게 변하거나 아니면 안변하기도 

하는데 그 이유를 알고 싶습니다. 


public class 클래스이름 extends SurfaceView implements SurfaceHolder.Callback,Runnable  {

private SurfaceHolder m_sHolder; 

private Thread        m_Thread    = null;         

private bac_GraphicUtil   m_gUtil;     


생성자{

m_sHolder=getHolder(); 

m_sHolder.addCallback(this); 

m_gUtil=new bac_GraphicUtil(m_sHolder);


bacteria_Player = new bac_Player(getContext(), true , m_gUtil, 33, 52, 60); 


Runnable bacteria = new Runnable() {

@Override

public void run() {

while(true){

if(세균을 배치하면 true){

try {

//퍼지는 효과애니메이션

1단계

Thread.sleep(180);

2단계

Thread.sleep(180);

3단계

Thread.sleep(180);

세균을 배치하면 false 

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

};

Thread t = new Thread(bacteria);

t.start();

}

@Override

public void run() {

while(m_bRun){ 

m_gUtil.lock();


synchronized(m_sHolder){


displayBackGround(); //배경화면


//세균을 그리는 부분

//각 방향별로 애니메이션을 체크함(true면 해당 좌표에 그림)


}

m_gUtil.unlock();

}


}

//터치 이벤트

public boolean onTouchEvent(MotionEvent event) {

int touchX=(int) event.getX();

int touchY=(int) event.getY();

int touchAction=event.getAction();


if (touchAction == MotionEvent.ACTION_DOWN) {

if(m_Thread != null) { 

int idx = 0;

int idy = 0;


idx = (int)((touchX-m_xPos)/m_Size);

idy = (int)((touchY-m_yPos)/m_Size);


if(idx <=6 && idy <= 6 && idx >=0 && idy >= 0){ //화면 범위 제한

if(bacteria_click != 1){

//세균 클릭전

//자기 세균이 맞는지 확인하고 이동가능한 범위를 표시

}else{

//1칸, 2칸이동 검사하고 그 주변에 다른 세균이 있으면 방향별로 애니메이션 true시킴

세균을 배치하면 true

}

}

}else{ 

//게임끝나고 다시 시작

m_nPlaySeq = 0;

bacteria_Player.init();

startThread();

}

}

return true;

}



private void startThread(){

if(m_Thread == null){

m_bRun   = true;

m_Thread = new Thread(this);

m_Thread.start(); 

}

}



private void stopThread(){

m_bRun   = false;

boolean retry = true;


while(retry){

try{

if(m_Thread != null)

{

m_Thread.join();

}


retry = false;

}catch(InterruptedException ie){}

}


m_Thread = null;

}


@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

startThread();

}


@Override

public void surfaceDestroyed(SurfaceHolder holder) {

// TODO Auto-generated method stub

stopThread();

}