自定义CCNode runAction无法在Cocos2d-x中执行?

时间:2014-04-03 05:07:24

标签: c++ cocos2d-x cocos2d-x-2.x

我有一个继承自CCNode的类。 HcharacterDrawnode包含一组StrokeDrawnode,它是另一个自定义CCNode。现在我将(m_HDrawnode)HcharacterDrawnode添加到图层和runAction。

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);
}

1 个答案:

答案 0 :(得分:0)

你绘制你的StrokeNodes但你忘了为HcharacterDrawnode调用CCNode :: draw()函数:

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;

}