Пользовательский CCNode runAction не может выполняться в Cocos2d-x?

У меня есть класс, который наследуется от CCNode. HcharacterDrawnode содержит группу StrokeDrawnode, которая является другим настраиваемым CCNode. Теперь я добавляю (m_HDrawnode) HcharacterDrawnode к слою и запускаю действие.

CCAction* place = CCMoveTo::create(2.0,ccp(0,0));
m_HDrawnode->runAction(place);

Но ничего не случилось. Я проверил некоторые веб-страницы. Кто-то сказал, что это может быть связано с m_bRunning Однако я не могу найти место для установки этой переменной.

HcharacterDrawnode.h

class HcharacterDrawnode : public CCNode
{
public:
HcharacterDrawnode();
~HcharacterDrawnode();
CREATE_FUNC(HcharacterDrawnode);
virtual bool init();
virtual void onEnter();
virtual void onExit();
virtual void draw();

void addPoint(CCPoint point);

void addStroke(Stroke s);

void removeLastStroke();

CC_SYNTHESIZE_RETAIN(CCArray*,strokeDrawlist,StrokeDrawnodeList);
private:

};

HcharacterDrawnode.cpp

#include "HcharacterDrawnode.h"
HcharacterDrawnode::HcharacterDrawnode():strokeDrawlist(NULL)
{
}

HcharacterDrawnode::~HcharacterDrawnode()
{
CC_SAFE_RELEASE(strokeDrawlist);
}

void HcharacterDrawnode::onEnter(){
CCNode::onEnter();

}

void HcharacterDrawnode::onExit(){
CCNode::onExit();
}

bool HcharacterDrawnode::init(){
this->setStrokeDrawnodeList(CCArray::create());
return true;
}

void HcharacterDrawnode::draw(){
CCObject* ob;
CCARRAY_FOREACH(strokeDrawlist,ob){
((StrokeDrawnode*)(ob))->draw();
}
}

void HcharacterDrawnode::addPoint(CCPoint point){
StrokeDrawnode* t = (StrokeDrawnode*)(strokeDrawlist->objectAtIndex(strokeDrawlist->count()-1));
t->addPoint(point);
}

void HcharacterDrawnode::addStroke(Stroke s){
strokeDrawlist->addObject(StrokeDrawnode::create(s));
}

void HcharacterDrawnode::removeLastStroke(){
strokeDrawlist->removeLastObject();
}

StrokeDrawnode.h

class StrokeDrawnode : public CCNode
{
public:
StrokeDrawnode();
StrokeDrawnode(Stroke stro);
~StrokeDrawnode();
static StrokeDrawnode* create(Stroke stro);
Stroke stroke;
ccColor4B mcolor;

virtual void onEnter();
virtual void onExit();

virtual void draw();
int visibleIndex;
void addPoint(CCPoint point);
private:

};

StrokeDrawnode.cpp

#include "StrokeDrawnode.h"
StrokeDrawnode::StrokeDrawnode()
{
}

StrokeDrawnode::StrokeDrawnode(Stroke stro){
this->stroke = stro;
}

void StrokeDrawnode::onEnter(){
CCNode::onEnter();
}

void StrokeDrawnode::onExit(){
CCNode::onExit();
}

StrokeDrawnode* StrokeDrawnode::create(Stroke stro){
StrokeDrawnode* pRet = new StrokeDrawnode(stro);
if (pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}else{
delete pRet;
pRet = NULL;
return NULL;
}
}

StrokeDrawnode::~StrokeDrawnode()
{

}

void StrokeDrawnode::draw(){
//CCLog("StrokeDrawnode::draw");
glLineWidth(6.0f);
ccDrawColor4F(0,0,0,1);
//  glEnable(GL_LINE_SMOOTH);
CCPoint pre = stroke.pointList[0];
for (int i = 1; i< stroke.pointCount; i++)
{
ccDrawLine(pre,stroke.pointList[i]);
pre = stroke.pointList[i];
}
//  glDisable(GL_LINE_SMOOTH);
}

void StrokeDrawnode::addPoint(CCPoint point){
this->stroke.addPoint(point);
}

0

Решение

Вы рисуете свои StrokeNodes, но забыли вызвать функцию CCNode :: draw () для HcharacterDrawnode:

void HcharacterDrawnode::draw(){
CCNode::draw();
CCObject* ob;
CCARRAY_FOREACH(strokeDrawlist,ob){
((StrokeDrawnode*)(ob))->draw();
}
}

Также, если вы перезаписали init () в вашем классе, вы должны вызвать init вашего родителя:

bool HcharacterDrawnode::init(){
if(!CCNode::init())
return false;

this->setStrokeDrawnodeList(CCArray::create());
return true;

}

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector