新人学习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);
}
}
}
}
```
标准的流程应该像楼上写的一样,楼主肯定是哪里用错了才有问题