2011-04-15 196 views
0

還有另一個關於類別爲OOP新的問題。我創造一個遊戲只是爲了好玩。它是一個自上而下的射手,太空射手。在類C++之間共享變量?

我有幾個不同的類別:

子彈(子彈座標的列表), 玩家(玩家精靈,位置等), 敵人(敵人的精靈,位置等), 碰撞(以座標斧,Ay和Bx,通過以查看它們是否發生了碰撞)

如何將Bullet,Enemy的座標發送到Collision類以查看它們是否發生了碰撞?

Collision col 
col.collision(ax, ay, bx, by) //how can I get the Player and Bullet pos? 

回答

5

也許你想要做的是有一個共同的類「場景對象」,有一個位置。然後玩家,敵人和子彈都從該類繼承。

你的碰撞然後不需要關於玩家,敵人等的知識,但只需要有位置的場景物體。你可以在你的基類中寫一個返回位置的Getter方法。

0

你通常必須經過每個敵人,並檢查敵方座標與你的玩家座標。
我相信你將這些敵人存儲在某個地方,最好是在像std::vector這樣的容器中。現在,讓我假設你確實做到了:

// somewhere in a 'Game' class 
std::vector<Enemy> myEnemies; 
Player myPlayer; 
Collision col; 

for(int i=0; i < myEnemies.size(); ++i){ 
    col.collision(myPlayer.getX(), myPlayer.getY(), myEnemies[i].getX(), myEnemies[i].getY()) 
} 

就是這樣。 :)你對子彈和類似的物體也一樣。將它們全部保存在容器中,遍歷該容器,並檢查對象的位置。
現在,對於另一個提示,如果一個類只包含方法並且沒有變量,那麼您可以創建這些自由函數。僅僅因爲你在項目的某些部分使用了OOP,並不需要你在任何地方使用它。使collision免費的功能,並完成它。 :)

1

我會爲子彈,敵人(也許是玩家)創建一個基類。我們稱之爲對象和對象將擁有座標,並且會有一個函數來確定碰撞是否發生。

在代碼它看起來像到以下幾點:

class Object 
{ 
    private: 
     Coord position; 

    public: 
     bool Collide(const Object& otherObject) const; 
};