2012-07-19 2 views
1

threaded surfaceview를 코딩했습니다. 그것은 작동하지만 잘 새로 고치는 것 같지 않습니다. 내가 잘 새로 고치지 않음을 의미하는 것은 EX입니다. EX : 마지막 위치에 그려지는 비트 맵 위치를 이동하면 + 새로운 것이됩니다.Android Threaded Surfaceview 새로 고침하지 않음

public GameView(Context context) 
{    
    super(context); 
    holder=getHolder(); 
    currentScreen=new TestScreen(); 
    currentScreen.Load(this.getResources()); 
} 

protected void Resume() 
{ 
    isRunning=true; 
    renderThread=new Thread(this); 
    renderThread.start(); 


} 


public void run() 
{ 
    while(isRunning) 
    { 
     gametime=lasttime-System.nanoTime(); 
     lasttime=System.nanoTime(); 
     if(!holder.getSurface().isValid()) 
      continue; 
     if(!(currentScreen==null)) 
     { 
      currentScreen.Update(gametime); 
      Canvas cv=holder.lockCanvas(); 
      currentScreen.Draw(cv, gametime); 


      holder.unlockCanvasAndPost(cv);       
     } 

    } 
} 
public void pause() 
{ 
    isRunning=false; 
    while(true) 
    { 
     try 
     { 
      renderThread.join(); 
      } 
      catch (InterruptedException e) 
      { 

      } 
     break; 
     } 
    renderThread=null; 
} 

} Screen 클래스 코드

:

{

public void Load(Resources resources) { 
    square=BitmapFactory.decodeResource(resources, R.drawable.square); 
    x=y=0; 
    super.Load(resources); 
} 

@Override 
public void Update(long gametime) { 
    x++; 
    super.Update(gametime); 
} 

@Override 
public void Draw(Canvas cv, long gametime) { 
    cv.drawBitmap(square, x, y, null); 
    super.Draw(cv, gametime); 
} 

}

내가 Screen 클래스없이 노력이 충족 여기

내 코드입니다 hod 그러나 그것은 같은 일을한다. 화면을 지우기 위해 선이 누락 되었습니까?

답변

1

lockCanvas()에 더러운 사각형을 제공하지 않기 때문에 시스템은 unlockCanvasAndPost (Canvas)와 다음에 lockCanvas()가 호출 될 때 Canvas에 어떤 일이 발생하는지 보장하지 않습니다.

이 때문에 변경된 부분뿐만 아니라 캔버스의 전체 내용을 다시 그려야합니다. Canvas의 나머지 부분을 채울 배경을 그리지 않고 움직이는 사각형 만 그리는 것처럼 보입니다.

참고 : lockCanvas (Rect dirty)를 사용한 경우 상황이 다를 수 있습니다.

관련 문제