cocos2d-x精灵动作不执行解决方法

来源:互联网 发布:手机百度云网络出错 编辑:程序博客网 时间:2024/05/17 08:15

首先,先来看下代码:

void GameEnemyBullet::setvisable(){    this->setVisible(true);  //设置精灵可见    isvisable=true;    this->runAction(CCJumpTo::create(3, CCPointMake(500, 500), 30, 5));   //让精灵执行跳跃动作    CCMessageBox("over", "over");        //弹一个小窗,只是为了验证是否执行到此}

代码也很简单,但当我执行时,调用此方法,总是不能执行跳跃动作,但确实函数执行了,因为已经弹窗了,也出现了一个静止的精灵,但它为啥不动呢。这就让人很迷惑了,为啥runAction不执行呢?

之后,我就看了下

bool GameEnemyBullet::init(){    CCSprite *bulletmainbody=CCSprite::create("DrDogZD.png");    bulletmainbody->runAction(CCRepeatForever::create(CCRotateBy::create(0.5, 350)));    isvisable=false;    this->setVisible(false);    addChild(bulletmainbody,1);    return true;}
而类GameEnemyBullet是继承自CCNode的,在创建对象时,用的是create方法,也重写了onEnter方法,代码如下:

void GameEnemyBullet::onEnter(){    CCNode::onEnter();}
后来,在CCLog()的帮助下,我发现重写的onEnter()就根本没有被调用,而且,更多的时候,我们根本就忘记了调用CCNode::onEnter();

这样,最终的效果就是,图片是出现了,当根本就不会执行任何动作,就一张图片静静的在那里了。

但这样也不对啊,理论上通过create创建GameEnemyBullet对象时,应该是先调用init()方法,后调用onEnter()方法的,但现在是没有调用的。

于是,我又看了创建GameEnemyBullet对象的类文件,这个文件是继承自CCLayer的,也重写了onEnter()方法,但是,我发现,在这个onEnter中,我没有调用父类的方法“CCLayer::onEnter();”。也就是说,我犯了一个新手最容易犯的错误,不要忘了在重写的onEnter方法中调用父类方法

所以,在这个文件中,我添加了CCLayer::onEnter();后,静止的图片终于可以动了,而且GameenemyBullet中的onEnter方法也被调用了!!!

最后,还是优化下难看而又低效的代码吧:

void GameEnemyBullet::onEnter(){    CCNode::onEnter();    this->setContentSize(CCSizeMake(21, 62));    //CCLog("gameenemybullet onenter");}bool GameEnemyBullet::init(){    CCSpriteBatchNode *batchnode=CCSpriteBatchNode::create("DrDogZD.png");    addChild(batchnode,1,3);    CCSprite  *bulletmainbody=CCSprite::createWithTexture(batchnode->getTexture());    bulletmainbody->runAction(CCRepeatForever::create(CCRotateBy::create(0.5, 350)));    isvisable=false;    this->setVisible(false);    batchnode->addChild(bulletmainbody,1);    //CCLog("gameenemybullet init");    return true;}

总结下,主要是我在实例化GameEnemyBullet对象的NewGame中,重写了NewGame的onEnter方法,但在却没有调用基类的CCLayer::onEnter();方法,从而导致在创建GameEnemyBullet对象时,GameEnemyBullet自身的onEnter方法没有被调用。这样就使得添加上的精灵没有任何动作效果。

同理,当你发现一个cocos2d-x的文字按钮明明应该可以点击的,但现在确不可以点击了,除了是没有添加到CCMenu外,很有可能也是这个问题。



欢迎转载,转载请注明出处:http://blog.csdn.net/somestill/article/details/9875743

原创粉丝点击