2012-08-12 6 views
0

Ogre를 사용하여 첫 번째 3D 게임을 만들려고 시도하면서 일반적인 "객체"클래스를 작성하기 시작했습니다. 생성자 :클래스의 게임 객체 캡슐화

Object(const char* mesh, Ogre::SceneManager*& sm) 
{ 
    ... 
    _sn = sm->getRootSceneNode()->createChildSceneNode(_sn_name); 
    _ent = sm->createEntity(_ent_name, mesh); 
    _sn->attachObject(_ent); 
    ...    
} 

_sn는 SceneNode에 *의 존재 및 엔티티 *을 (사립) _ent. 문제는 아무것도 화면에 그려지지 않는다는 것입니다. 내가 사용하는 경우 는하지만 : 클래스의

Ogre::Entity *map = mSceneMgr->createEntity("map","map.mesh"); 
Ogre::SceneNode *sc = mSceneMgr->getRootSceneNode()->createChildSceneNode("mapNode"); 
sc->attachObject(map); 

외부 객체가 그려 모든 것이 작동됩니다.

내 접근 방식에 어떤 문제가 있으며 어떻게 해결할 수 있습니까?

+0

왜 포인터 참조를 매개 변수로 사용하고 있습니까? 그렇게 할 특별한 이유가 있습니까? –

+0

불필요한 복사 (?)를 피하기 위해 간단한 포인터/설명을 사용해 보았지만 작동하지 않습니다. – user1233963

+0

당신은 잘못했거나 잘못 했어요. 두 옵션 모두 복사를 피할 수 있습니다. 둘 다 필요하지는 않습니다. –

답변

0

이 문제를 해결하기 위해 관리했습니다. 내 소멸자에서 장면 관리자에게 detachAllObjects()를 호출하게했습니다. 댓글을 달기/제거하여 문제를 분명히 해결했습니다.

1

나는 해결책을 가지고 : 나는 그것을 전에 같은 경험을 가지고, 당신은 확인해야합니다 : 얼마나 많은 인스턴스를

  1. 을 만들어?

  2. 몇 개의 생성자가 여기 있습니까?

  3. 이 단어를 사용합니까? 클래스가 상속 된 경우 부모 메서드와 특성을 적용하는 데주의를 기울여야합니다. 이러한 메서드는 생성자에 따라 다르며 null 포인터를 반환 할 수 있기 때문입니다.

  4. 상속을 사용하는 경우 상속 된 클래스에 부모 obj를 전달하는 것이 좋습니다.

+0

인스턴스 1 개, 생성자 1 개, 상속 없음 – user1233963

+0

스레드에 메모리를 할당 할 때주의하십시오. – PersianGulf