2013-10-18 2 views
0

우선 불쌍한 영어를 용서하십시오.모든 클래스의 객체 배열에 대한 액세스

글쎄, 나는 C++에서 Allegro의 라이브러리를 사용하여 간단한 게임을 만들려고 노력하고있다.하지만 모든 클라스에서 액세스 할 수있는 객체 배열을 만드는 방법을 모르겠다.

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

그런 다음 내가 CBall의 클래스의 기능 CRing 인스턴스와의 충돌을 검사 할 수 있도록해야합니다

더 정확히 말해서, 나는 주요 클래스의 main() 함수에서이 코드가 있습니다. 다음과 같이 입력하십시오 :

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

아이디어가 있으십니까?

감사합니다.

+0

은 'CRing'을 'CheckRingCol' 메소드에 전달합니다. '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

관련 문제