2011-12-14 83 views
0

我試圖讓飛行氣球(無限上下),並通過點擊其中一個,它會改變它的方向。我試圖使用動畫,但它不支持在當前時間點擊當前位置的視圖。我知道,有兩種方法,至少:單擊安卓按鈕動畫

  • 使用OpenGL的
  • 和使用的畫布。

我不想使用OpenGL來退出簡單的動畫。我不明白怎麼做,使用畫布(被讀取this,谷歌文檔和一些谷歌搜索鏈接)。 我不需要代碼,所有我需要它的方式如何做和算法。

+0

我不'現在我們有時間來寫一個完整的解釋,但是google的Android遊戲教程,你需要創建一個線程來執行你的氣球對象的更新命令,然後讓他們在畫布上調用一個繪圖命令,這裏有很多教程可用,他們應該幫助你。我可以稍後發佈代碼從我的項目開始,它使用了你以後需要的大量工作。 – Grambot 2011-12-14 19:29:15

回答

1

好吧,這是我已經設置了我的項目,將完全按照自己的工作需要一個...

您需要創建4個主要方面:
- 一活動(延伸活動)
- 甲SurfaceView(延伸SurfaceView實施SurfaceHolder.Callback)
- 螺紋(擴展螺紋)
- Objects的相互作用(延伸繪製對象)

活動開始,併產生一個創建線程一個SurfaceView。視圖或線程可以包含您繪製/與之交互的對象,它取決於您如何在此處存儲數據,但是如果您想出一個類間耦合最少的設計,那麼最簡單。

一旦啓動,線程運行不斷,直到停止(設置isRunning爲false):

/** 
* Processing loop 
*/ 
public void run() { 
    while (isRunning) { 
     try { 
       sleep(25); 
      } catch (InterruptedException e) { 
       Log.e("Thread","Thread Interruption"); 
       e.printStackTrace(); 
      } 
     update(); 
    } 
    Log.d("Thread", "Game Loop Stopped"); 
} 

/** 
* Main processing of the game loop. 
*/ 
private void update() { 
    handleInput(); 
    updatePhysics(); 
    updateUI(); 
    updateState(); 
    updateAI(); 
    updateAnimations(); 
    updateSound(); 
    updateVideo(); 
} 

在這個類,你看update()方法,做了一堆動作線程的每個迭代。

您會感興趣的方法大多是handleInput,updateUIupdatePhysics方法。

handleInput中,您將回調SurfaceView以獲取處理信息所需的數據。我的handleInput是相當簡單的,它只是從SurfaceView類的onTouchEvent(當您使用SurfaceHolder.OnCallBack接口時得到實現)抓取MotionEvent

updateUI方法調用SurfaceView的update它與每個對象重新繪製Canvas,或氣囊

public void update(List<Actor> actors) { 
     Canvas canvas = null;  
     try { 
      canvas = surface.lockCanvas(); 
      synchronized (surface) { 
       //Blank the Canvas 

       for (int i = 0; i < actors.size(); i++) { 
        actors.get(i).draw(canvas); 
       } 
      } 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } finally { 
      if (canvas != null) { 
       surface.unlockCanvasAndPost(canvas); 
      } 
     } 
    } 

在這裏我們可以看到,它調用draw方法傳遞Canvas對象中的每一個你可交互的對象。我在上面的代碼中調用了我的「Actor」。您如何選擇執行draw取決於您,但聽起來您會使用很多canvas.drawBitmap()函數。

回到主題的updatePhysics方法,您會希望使用它來在對象被繪製到屏幕之前或之後更新對象。對於你來說,你需要讓他們在屏幕上改變他們的X和/或Y位置,或者在handleInput決定你擊中氣球后改變它的移動方向。


很難在StackOverflow回覆中很好地解釋這個問題。如果你真的希望我可以嘗試在本週末將更多的信息放在一起,並將它張貼在外部給你(我可以提供我的UML類圖表,其中包括圖片示例,結構和數據流等其他信息。)

請讓我知道如果我可以進一步幫助你!請注意,這不是我所有的工作。我使用了很多在線基礎Android遊戲結構的教程,但是現在沒有可用的鏈接提供參考。