나는 세 가지 클래스 Tree
, Fruit
및 Basket
을 가지고 있습니다. 각자 (각 클래스에는 자체 이 있음)을 통해 액세스하는 자체 CCSprite
회원이 있습니다. 또한 각 클래스에는 CCSprite
의 텍스처, 위치 및 기타 CCSprite
관련 항목을 설정하는 draw()
메서드가 있습니다. 이 클래스의 인스턴스를 만들 때, 메인 레이어에 항상이 각각의 스프라이트가 addChild()
필요합니다. 실제로 아무 문제가 없지만 각 draw()
메서드는 기본 레이어에 addChild()
메서드를 처리하는 메서드가 될 것이기를 바랍니다.클래스에서 메인 씬/레이어에 액세스
내 코드는 다음과 같다 :
// Tree.cpp
#include "Tree.h"
#include "cocos2d.h"
using namespace cocos2d;
Tree::Tree() {
draw();
}
CCSprite * Tree:getSprite() {
return m_TreeSprite;
}
void Tree::draw() {
m_TreeSprite = CCSprite::create("tree.png");
m_TreeSprite -> setPosition (100, 100);
}
/*
* The other classes have similar structure. Will take a long long post if I write them all.
*/
// MainLayer.cpp
void MainLayer::drawScreenObjects() {
m_Tree = Tree();
this -> addChild(m_Tree.getSprite());
m_Basket = Basket();
this -> addChild(m_Basket.getSprite());
}
draw()
방법이 유사한 볼 수 있도록 내가 원하는 : 내가 생각하고
void Tree::draw() {
m_TreeSprite = CCSprite::create("tree.png");
m_TreeSprite -> setPosition(100, 100);
MainLayer -> addChild(m_TreeSprite);
}
솔루션의
- 입니다
MainLayer
에 대한 참조를 모든 클래스에 전달하고 멤버 변수에 해당 참조를 보관합니다. - 모든 클래스를 CCNode에서 상속 받아 자신의 자식을 가질 수 있도록합니다.
다른 가능한 솔루션은 무엇입니까? 나는 현재 설치가 더럽고 불안정하다고 느낍니다. 미리 감사드립니다.
아마 트리 : : drawOnParent (CCNode * 부모) {부모 -> addChild (m_TreeSprite) ;}? –
@ m.ding 작동 할 수도 있지만'Tree'의 생성자에서 클래스 자체에서'draw()'를 호출하려고합니다. 이를 사용하여 클래스에 'MainLayer'에 대한 참조를 전달해야합니다. MainLayer에'CCSprite'를 추가하는 것을 포함하여 인스턴스를 만들 때이 클래스들이 스스로 설정하는 모든 것을하기를 원합니다. – alxcyl
조금 길어서 대답으로 게시합니다. –