简体   繁体   English

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

[英]custom CCNode runAction cannot execute in Cocos2d-x?

I have a class that inherits from CCNode. 我有一个从CCNode继承的类。 HcharacterDrawnode contains a group of StrokeDrawnode which is another custom CCNode. HcharacterDrawnode包含一组StrokeDrawnode,这是另一个自定义CCNode。 Now I add (m_HDrawnode)HcharacterDrawnode to a layer and runAction. 现在,我将(m_HDrawnode)HcharacterDrawnode添加到图层并运行。

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

But nothing happened. 但是什么也没发生。 I have checked some webpage. 我已经检查了一些网页。 Someone said it may related to m_bRunning , however I cannot find a place to set this variable. 有人说这可能与m_bRunning有关,但是我找不到设置此变量的地方。

HcharacterDrawnode.h 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 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 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 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);
}

You draw your StrokeNodes but you forgot to call the CCNode::draw() function for HcharacterDrawnode: 您绘制了StrokeNodes,但忘记了为HcharacterDrawnode调用CCNode :: draw()函数:

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

Also if you overwrite init() in your class you should call init of your parent: 另外,如果您在类中覆盖init(),则应调用父级的init:

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

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

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM