精灵继承类使用create创建对象不触发onEnter??

新人学习coco2d-x,因为要精灵处理触摸事件,所以新建一个继承CCSprite的类,重写了onEnter()方法,没有重写create()方法,在新建一个继承精灵类的对象的时候使用create()方法时并没有调用onEnter()方法,使用new创建的时候调用了onEnter方法。在网上查的时候说使用create新建对象时会相继调用ini()t和onEnter(),使用new时只会调用onEnter()。求大神说明一下具体是怎么回事???是我代码有问题还是说,上面那个说法是错误的????正确的情况的是怎么样的呢??

加这个了吗 CREATE_FUNC

create() 函数只负责 分配内存和初始化对象, 将Sprite addChild到一个已经在运行的节点上才会调用onEnter函数的。

临时给你写了一个,只有简单的接口,提供给你参考

//
//  TouchSprite.cpp
//  HelloWorld
//
//  Created by Relvin on 14-6-27.
//
//


#include "TouchSprite.h"




TouchSprite::TouchSprite()
: _touchEnabled(false)
{
 
}


TouchSprite::~TouchSprite()
{
 
}


TouchSprite* TouchSprite::create(const char *fileName)
{
 TouchSprite *pSprite = new TouchSprite;
    if (pSprite && pSprite->initWithFile(fileName)) {
        pSprite->autorelease();
        return pSprite;
    }
 CC_SAFE_RELEASE_NULL(pSprite);
 return NULL;
}


void TouchSprite::onEnter()
{
    CCSprite::onEnter();
 if (_touchEnabled) {
 this->registerWithTouchDispatcher();
    }
}


void TouchSprite::onExit()
{
    CCSprite::onExit();
 if (_touchEnabled) {
        CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
    }
}


bool TouchSprite::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
    CCPoint touchStartPos = pTouch->getLocation();
    CCPoint nsp = convertToNodeSpace(touchStartPos);
    CCRect bb;
 
    bb.size = m_obContentSize;
 
    if (bb.containsPoint(nsp))
    {
        return true;
    }
 return false;
}


void TouchSprite::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
 
}


void TouchSprite::registerWithTouchDispatcher()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);
}


void TouchSprite::setTouchEnabled(bool isEnable)
{
    if (_touchEnabled != enabled)
    {
        _touchEnabled = enabled;
        if (m_bRunning) {
            if (enabled)
            {
                this->registerWithTouchDispatcher();
            }
            else
            {
                CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
            }
        }
    }
}





```

标准的流程应该像楼上写的一样,楼主肯定是哪里用错了才有问题