2013-08-24 36 views
1

因此,我一直試圖弄清楚如何繪製形狀和圖像到表面視圖。 iv一直在使用多個教程。但現在我失去了。我有了我的遊戲循環線程,並從我瞭解的IM是有這個循環如何使用線程類調用SurfaceView的onDraw方法

public void run() { 
    Canvas c; 
    while (running) { 
     c = null; 
     try { 
      c = surfaceHolder.lockCanvas(null); 
      synchronized (surfaceHolder) { 
       //Insert methods to modify positions of items in onDraw() 
      } 
     } finally { 
      if (c != null) { 
       surfaceHolder.unlockCanvasAndPost(c); 
      } 
     } 
    } 

} 

我有擁有的onDraw(帆布油畫)方法surfaceView所有變量更新。說我想橢圓我的線程添加到我的屏幕我怎麼做,從我while循環

目前,我有我的線程類

private SurfaceHolder surfaceHolder; 
private gameMain gamePanel; //my surfaceview class 
private boolean running; 

這些變量,做我需要這在我surfaceview類?

setWillNotDraw(false); 

如果即時通訊完全錯誤的人指出。我不希望使用OpenGL或任何庫

回答

1

所以我給了這個問題的解決辦法是改變的地方說:

try { 
    c = view.getHolder().lockCanvas(); 
    synchronized (view.getHolder()) { 
     view.onDraw(c); 
    } 
    } finally { 
     if (c != null) { 
      view.getHolder().unlockCanvasAndPost(c); 
     } 
} 

上與GameLoopThread類的run()方法:

try { 
    c = view.getHolder().lockCanvas(); 
    synchronized (view.getHolder()) { 
     if(c != null) 
      view.onDraw(c); 
    } 
    } finally { 
     if (c != null) { 
      view.getHolder().unlockCanvasAndPost(c); 
     } 
} 

要完成此活動,並呼籲另一個我添加了一個名爲GAMEOVER方法效果很好:

private void GameOver() { 
    gameLoopThread.setRunning(false); 
    Context c = getContext(); 
    c.startActivity(intent); //intent must be declared 
    ((Activity) Pruebas.this.getContext()).finish(); 
} 

我希望這可以幫助某人。

+0

什麼是視圖?我在使用視圖時遇到錯誤 –

+0

onDraw發出可疑的方法調用。可以使用它嗎? – LadyWoodi