2013-10-18 148 views
0

首先,請原諒我可憐的英語。我試圖用Allegro的庫在C++中製作一個簡單的遊戲,但是我不知道如何創建一個對象數組,這個對象數組至少可以被所有類型的對象所接受。訪問所有類的對象數組

更確切地說,我有這樣的代碼在主類的main()函數:

CBody **objs = new CBody*[n]; 
objs[0] = new CBall(320,240); 
objs[1] = new CRing(500,120); 

然後我需要在CBall的類功能檢查與CRING實例碰撞。例如:

bool CBall::CheckRingCol(){ 
    return (colCircle(myX,myY,myRadious,objs[1]->myX,objs[1]->myY,objs[1]->myRadious)); 
} 

任何想法?

謝謝你,夥計們!

+0

將'CRing'傳遞給'CheckRingCol'方法。 'bool CBall :: CheckRingCol(const CRing&ring)'並使用'obj [0] - > CheckRingCol(* obj [1])調用;' – clcto

回答

2

首先,不要使用雙指針瘋狂。你不需要它。

你有CBody數組,這大概是一個基類(有助於發佈更多的代碼)

#include <memory> 
typedef shared_ptr<CBody> spBody; 

vector<spBody> bodies; 
bodies.emplace_back(spBody(new CBall(320, 140))); // don't need to bother about delete when you use a shared_ptr 
bodies.emplace_back(spBody(new CRing(500, 120))); 

誰在叫球環碰撞?

您可以將該環作爲參數傳遞給bool CBall::CheckRingCol(const CRing*) const

+0

非常感謝,請原諒我不清楚。那麼,它是由一個CBall實例調用的。 –

+0

沒問題。有人需要遍歷CBall,然後調用相關的CRing。我不確定這個關聯是如何在你的代碼中完成的。 – Raja