2012-04-25 67 views
0

交際現在,我一直在尋找這個問題的答案了一段時間,但谷歌和我所有的力量似乎令我失望。對象與父母在Java

我得到了這個類。 (我的世界)。 在MyWorld我有對象

GameUnit m_MyUnits[] = new GameUnit[maxUnits]; 

眼下m_MyUnits都充滿了GameUnits和子類在這裏過的陣列,並在屏幕高興,因爲乳酪蛋糕走來走去。 我甚至爲自己每個人寫了自己的小碰撞檢測,所以他們不會碰撞到對方。

而且一切正常,但! 對於我的碰撞檢測工作,我所選擇的最慢的方式(和大多數存儲器需要我覺得)

在MyWorld我第一循環槽各GameUnit,並得到它的X和Y位置的陣列 私人INT [] [ ] Positions = new int [2] [maxUnits]);

我然後循環槽的每一個和GameUnit此數組分配給它。 (GameUnit都有自己的陣列稱爲頭寸此)

現在,雖然這個工程,我不禁想,這是愚蠢的喜歡...。那麼,我不會在這裏使用這些詞。

有沒有辦法爲GameUnit來調用MyWorld的位置,甚至更好,爲遊戲單元調用數組m_MyUnits []的getX()和m_MyUnits []的getY()在MyWorld 一些東西一樣這個(我使用Parent從GameUnit引用MyWorld)

For(int i = 0;i < Parent.maxUnits;i++) { 
    int targetX = Parent. m_MyUnits[i].getX(); 
    int targetY = Parent. m_MyUnits[i].getX(); 
    //Do some thing like collition detection with the data. 
} 

這是可能的嗎?

您的JavaApprentis。

+0

你必須MyWorld'的'變量實例的引用或全部你想獲得'靜態'的東西?此級別的依賴可能表明您的設計存在缺陷。 – twain249 2012-04-25 21:45:39

+0

是的,它是有缺陷的......或者我猜是這樣? 如果你問天氣與否,我已經將MyWorld的任何信息傳遞給GameUnit的實例,然後沒有。 我沒有!我猜想我喜歡做什麼。但我不確定。 如果我喜歡這樣做,那我該怎麼做?遊戲單元的構造函數是(int,int,double)要添加什麼? 和什麼傳遞? – JavaApprentis 2012-04-25 21:56:01

+0

然後,您可以執行@ErnestFriedmanHill建議的操作,併爲您的構造函數添加一個「MyWorld」參數。 – twain249 2012-04-25 21:57:00

回答

0

當你創建一個GameUnit,你可以通過MyWorld作爲構造函數的參數。 GameUnit構造函數可以將MyWorld對象存儲在成員變量中。然後,當需要進行collsion檢測時,它可以通過調用該對象的方法來詢問MyWorld的潛在合作伙伴列表。

GameUnit

private MyWorld myWorld; 

public GameUnit(int,int,double, MyWorld m) { 
    myWorld = m; 
} 

然後在MyWorld,當你犯了一個GameUnit

new GameUnit(1, 2, 1.0, this); 

然後在GameUnit所有方法,你有MyWorld對象myWorld可供使用。

+0

乾草謝謝,但。正如我之前回答twain: 我喜歡這樣做,但我該怎麼做? GameUnit的構造函數是(int,int,double)要添加什麼?以及通過什麼?以及要撥打什麼? – JavaApprentis 2012-04-25 21:57:38

+0

查看我的編輯瞭解更多詳情 – 2012-04-25 22:01:14

+0

感謝男人,這節省了我(只是在運行程序時使用了80%的內存)。 – JavaApprentis 2012-04-25 22:23:04

0

排序的 類型MyWorld的世界屬性添加到GameUnit。 更改GameUnit的構造函數以接受World作爲參數並將World設置爲它。

添加的getX和傑蒂方法MyWorld,即包m_MyUnits [I] .getX()和與的getY陣列作爲參數在索引中。

給像

For(int i = 0;i < World.maxUnits;i++) { 
    int targetX = World. getX(i); 
    int targetY = World. getY(i); 
    //Do some thing like collition detection with the data. 
} 

說,我想我會反轉這一點,這樣做

If (World.Collide(this)) 
{ 
    // Die messily. 
}