2012-04-03 71 views
0

有一段時間我在J2ME中編程。我現在想創建「超級」遊戲2D。起初採取最重要的數據:Java - 檢索某個類的對象

  • 比賽的投籃命中率,你與戰士和消防敵人去
  • 每個士兵是一次Soldier類對象(Sprite後繼承)
  • 每個士兵都能夠產生子彈 - Bullet類的對象(在Sprite之後也繼承)

我在這裏遇到了問題。這是如此:子彈擊中士兵。如何將士兵的物體轉移到子彈的物體上(反之亦然),以降低士兵的HP值。

在一目瞭然下一頁數據:

  • Soldier類已經得到靜態字段HP
  • Bullet類已經得到靜態字段hit包含有關子彈的力數據

了我在檢查條件語句玩家是否碰到trpas - TiledLayer。這不是沒有問題。問題是檢查與子彈碰撞。方法檢查與Sprite,TiledLayer,Layer的一次對象碰撞。子彈的物體會很多。在這裏,這種選項是檢查某些類型的碰撞,而不是某些類型的某個對象(不檢查與子彈1,子彈2,子彈3作爲隊列以及類型爲Bullet的所有類型的碰撞)?

我的問題。

1.如果碰撞發生,我可以將子彈的數據傳送給士兵嗎? 2.我如何檢測與Bullet類型的碰撞,而不是用這種類型的x子彈號?

回答

0

Object類有一個getClass()方法,該方法返回給定Object是實例的類的名稱。這不是最好的編程習慣,但它的工作原理。如果您需要將Bullet數據「傳輸」到Soldier,請添加接受子彈/士兵的衝突方法:soldierCollisionEvent(Bullet b)或甚至collision(Soldier s, Bullet b)。或者,您可以利用object-oriented programming讓對象共享數據和事件,而不用擔心(太多)關於類的類型。

0

您在J2ME中沒有反射,所以沒有Bullet.class或類似的東西。

即使有,它仍然沒有幫助,因爲你仍然必須(以某種方式)檢查所有的項目符號。

但是,你可以嘗試做一些更智能的事情,比如跟蹤幾條子彈,你知道它們更接近Soldier。如果你覺得它,你甚至可以嘗試先進的算法/數據結構空間分區(k-d trees,或BVH),這是非常有據可查的三維計算機圖形和2D時使用更簡單。

祝你好運!

編輯:如果你只有少數子彈(比如說10),那麼不需要所有的花哨的東西。這隻會讓事情變得複雜,只是檢查每顆子彈的碰撞應該沒問題。