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();
}




그리는 영역에다가 Thread를 Sleep하면 그리다가 멈추라는건데... 그럼 당연히 문제생기지않을런지요