2013-10-18 103 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