2012-04-07 65 views
-1

我正在嘗試做一個onTouchEvent來創建一個導彈,這個導彈會從我的角色精靈中向前推進。 我使用Android導彈精靈

 if (missdraw = true){ 
      canvas.drawBitmap(missile,missilex,missileY,null); 
      missilex = missilex + 14; 
      missdraw = false; 
     } 
在我的onDraw方法

這個工作,但問題是這隻會造成一次一個。 我試着創建一個類來處理這個問題,但是這只是導致一個錯誤,當我嘗試着火時崩潰。 以下是我使用的類:(這是在OnDraw中我gameview)

 for (Batcher missile : missiles){ 
      missile.onDraw(canvas); 
     } 

這是在類

public Batcher(List<Batcher> temps, ScreenActivity newView, float x, 
     float y, Bitmap missile){ 

    this.x = 1; 
    this.y = 2; 
    this.missile = missile; 

} 

public void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    canvas.drawBitmap(missile, x,y, null); 

} 

我希望得到任何幫助,而且如果你能解釋它是如何工作的,而不僅僅是代碼,因爲它對於編程來說是相當新穎的,並且真的需要了解即時操作以及爲什麼要這樣做,而不是僅僅因爲它的工作而複製人員代碼。

乾杯菲爾。

回答

1

實際上,你的概念很不錯。有幾件事我不太瞭解你發佈的代碼示例,我會試着翻譯成我會做的事情,你可以告訴我,如果我做錯了:)

in你的遊戲類,你需要(和它看起來像你)導彈的列表:

LinkedList<Batcher> missiles; 

在你onTouch(),但導彈創建 -

missiles.add(new Batcher(missilex, missiley, missile)); 

你現在有導彈的集合。請注意,我沒有在批處理器的構造函數中包含該列表,因爲對象應該永遠不需要知道它是集合的一部分。所有它需要知道的是如何繪製自己和在哪裏。因爲我認爲所有的導彈都會頻繁地添加到屏幕上或從屏幕上刪除,而我一次只能在屏幕上顯示一些導彈,所以我使用了LinkedList,它可以快速添加和刪除,但訪問特定的導彈。如果您需要訪問集合中的特定項目並且集合沒有發生太大變化,那麼您可以使用ArrayList。上的onDraw - 因爲你擁有它的導彈繪製本身,這是很好的,但我更願意讓視圖進行繪製,用導彈告訴它,它應該被繪製 -

for (Batcher missile : missiles){ 
    missile.setX(missile.getX() + 14); // to make it move 
    if (missile.getX() > canvas.gedWidth()) { //check if it's left the screen 
    missiles.remove(missile); // Remove it 
    } 
    else { //perform drawing 
    canvas.drawBitmap(missile.getBitmap(), missile.getX(), missile.getY(), null); 
    } 
} 

希望這會爲你做,但隨時讓我知道,如果有什麼你想我更多地解釋!

+0

謝謝你的幫助,我已經得到它的工作了(以及列表陣列正在製造多枚導彈)現在的問題是它試圖刪除時,如果屏幕上有多個導彈,它會崩潰。對於遲到的答覆也很抱歉,因爲單純的工作陷入困境,所以暫時擱置。 – Phil 2012-05-26 15:01:54