Animation 手动动画不';t在Cocos2d-x中工作

Animation 手动动画不';t在Cocos2d-x中工作,animation,cocos2d-x,Animation,Cocos2d X,我正在测试手动动画。然而,动画似乎有一些问题,所以它不工作 这些是代码。你能看一下,告诉我哪里错了吗 HelloWorldScene.h #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" #include <string> USING_NS_CC; class HelloWorld : public cocos2d::CCLayerColor{ public: /

我正在测试手动动画。然而,动画似乎有一些问题,所以它不工作

这些是代码。你能看一下,告诉我哪里错了吗

HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h" 
#include <string>
USING_NS_CC;

class HelloWorld : public cocos2d::CCLayerColor{
public:
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();  

// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::CCScene* scene();

// a selector callback
void menuCloseCallback(CCObject* pSender);

// implement the "static node()" method manually
CREATE_FUNC(HelloWorld);    

virtual void onEnter();

protected:
CCSprite*    m_grossini;

};
#endif // __HELLOWORLD_SCENE_H__
\ifndef\uuuHelloWorld\uh场景__
#定义“HELLOWORLD”场景__
#包括“cocos2d.h”
#包括
使用\u NS\u CC;
类HelloWorld:public cocos2d::CCLayerColor{
公众:
//这里有一个区别,cocos2d-x中的方法'init'返回bool,而不是cocos2d-iphone中的'id'
虚拟bool init();
//cpp中没有“id”,因此建议返回类实例指针
静态cocos2d::CCScene*scene();
//选择器回调
作废菜单关闭回调(cObject*pSender);
//手动实现“static node()”方法
创建函数(HelloWorld);
虚拟void-onEnter();
受保护的:
CCSprite*m_grossini;
};
#endif/\uuuu HELLOWORLD\uh场景__
HelloWorldScene.cpp

#include "HelloWorldScene.h" 

USING_NS_CC;

CCScene* HelloWorld::scene()
{
    CCScene *scene = CCScene::create();

    HelloWorld *layer = HelloWorld::create();

    scene->addChild(layer);

    return scene;
}

bool HelloWorld::init()
{
    if ( !CCLayerColor::initWithColor( ccc4(255,255,255,255) ) )
    {
        return false;
    }

    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();

    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                        "CloseNormal.png",
                                        "CloseSelected.png",
                                        this,
                                        menu_selector(HelloWorld::menuCloseCallback));

    pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
                                origin.y + pCloseItem->getContentSize().height/2));

    CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
    pMenu->setPosition(CCPointZero);
    this->addChild(pMenu, 1);

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    m_grossini = CCSprite::create("grossini.png");
    m_grossini->retain();
    this->addChild(m_grossini);
    m_grossini->setPosition(ccp(winSize.width/2, winSize.height/2));
    return true;
}

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
    CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
#else
    CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
#endif
}

void HelloWorld::onEnter(){
    CCAnimation* animation = CCAnimation::create();
    for( int i=1;i<15;i++)
    {
        char szName[100] = {0};
        sprintf(szName, "grossini_dance_%02d.png", i);
        animation->addSpriteFrameWithFileName(szName);
    }
    // should last 2.8 seconds. And there are 14 frames.
    animation->setDelayPerUnit(2.8f / 14.0f);
    animation->setRestoreOriginalFrame(true); 
    CCAnimate* action = CCAnimate::create(animation);
    m_grossini->runAction(CCSequence::create(action, action->reverse(), NULL));
}
#包括“HelloWorldScene.h”
使用\u NS\u CC;
CCScene*HelloWorld::scene()
{
CCScene*scene=ccscscene::create();
HelloWorld*layer=HelloWorld::create();
场景->添加子对象(层);
返回场景;
}
bool HelloWorld::init()
{
如果(!CCLayerColor::initWithColor(ccc4(255255)))
{
返回false;
}
CCSize visibleSize=CCDirector::sharedDirector()->getVisibleSize();
CCPoint origin=CCDirector::sharedDirector()->getVisibleOrigin();
CCMenuItemImage*pCloseItem=CCMenuItemImage::create(
“CloseNormal.png”,
“CloseSelected.png”,
这
菜单选择器(HelloWorld::menuCloseCallback));
pCloseItem->setPosition(ccp(origin.x+visibleSize.width-pCloseItem->getContentSize().width/2,
origin.y+pCloseItem->getContentSize().height/2);
ccmen*pMenu=ccmen::create(pCloseItem,NULL);
pMenu->设置位置(CCPointZero);
此->添加子对象(pMenu,1);
CCSize winSize=CCDirector::sharedDirector()->getWinSize();
m_grossini=CCSprite::create(“grossini.png”);
m_grossini->retain();
本->addChild(m_grossini);
m_grossini->设置位置(ccp(winSize.width/2,winSize.height/2));
返回true;
}
void HelloWorld::menuCloseCallback(cObject*pSender)
{
#如果(CC_目标_平台==CC_平台_WINRT)| |(CC_目标_平台==CC_平台_WP8)
CCMessageBox(“您按下了关闭按钮。Windows应用商店应用程序未实现关闭按钮。”,“警报”);
#否则
CCDirector::sharedDirector()->end();
#如果(CC_目标_平台==CC_平台_IOS)
出口(0);
#恩迪夫
#恩迪夫
}
void HelloWorld::onEnter(){
CCAnimation*animation=CCAnimation::create();
对于(int i=1;iaddSpriteFrameWithFileName(szName));
}
//应该持续2.8秒,共有14帧。
动画->setDelayPerUnit(2.8f/14.0f);
动画->设置恢复原始帧(真);
CCAnimate*action=CCAnimate::create(动画);
m_grossini->runAction(CCSequence::create(action,action->reverse(),NULL));
}

我希望你能帮助我。非常感谢你!

试试下面的事情:

首先,删除此行
m_grossini->retain();
,因为addchild会自动增加其retain计数

发现了问题

当您重写
OnEnter
方法时,您需要为基类手动调用它。在您的情况下,添加行:-

    CCLayerColor::onEnter();
在OnEnter方法中,将完成这项工作


将来重写基类方法时要小心。

尝试以下操作:

首先,删除此行
m_grossini->retain();
,因为addchild会自动增加其retain计数

发现了问题

当您重写
OnEnter
方法时,您需要为基类手动调用它。在您的情况下,添加行:-

    CCLayerColor::onEnter();
在OnEnter方法中,将完成这项工作

将来重写基类方法时要小心。

请尝试以下代码:

CCAnimation* animation = CCAnimation::create();

for( int i=1;i<15;i++)

animation->addSpriteFrameWithFileName((CCString::createWithFormat("grossini_dance_%02d.png",i)->getCString()));
// should last 2.8 seconds. And there are 14 frames.
 animation->setDelayPerUnit(2.8f / 14.0f);
 animation->setRestoreOriginalFrame(true); 
 CCAnimate* action = CCAnimate::create(animation);
 m_grossini->runAction(action);  //Run once all frame(OR) 
 m_grossini->runAction(CCRepeatForever::create(action)); //Run RepeatForever
CCAnimation*animation=CCAnimation::create();
对于(inti=1;iaddSpriteFrameWithFileName((CCString::createWithFormat(“grossini_dance_uu%02d.png”,i)->getCString());
//应该持续2.8秒,共有14帧。
动画->setDelayPerUnit(2.8f/14.0f);
动画->设置恢复原始帧(真);
CCAnimate*action=CCAnimate::create(动画);
m_grossini->runAction(action);//一次运行所有帧(或)
m_grossini->runAction(CCRepeatForever::create(action));//Run RepeatForever
尝试以下代码:

CCAnimation* animation = CCAnimation::create();

for( int i=1;i<15;i++)

animation->addSpriteFrameWithFileName((CCString::createWithFormat("grossini_dance_%02d.png",i)->getCString()));
// should last 2.8 seconds. And there are 14 frames.
 animation->setDelayPerUnit(2.8f / 14.0f);
 animation->setRestoreOriginalFrame(true); 
 CCAnimate* action = CCAnimate::create(animation);
 m_grossini->runAction(action);  //Run once all frame(OR) 
 m_grossini->runAction(CCRepeatForever::create(action)); //Run RepeatForever
CCAnimation*animation=CCAnimation::create();
对于(inti=1;iaddSpriteFrameWithFileName((CCString::createWithFormat(“grossini_dance_uu%02d.png”,i)->getCString());
//应该持续2.8秒,共有14帧。
动画->setDelayPerUnit(2.8f/14.0f);
动画->设置恢复原始帧(真);
CCAnimate*action=CCAnimate::create(动画);
m_grossini->runAction(action);//一次运行所有帧(或)
m_grossini->runAction(CCRepeatForever::create(action));//Run RepeatForever

“不起作用”的确切含义是什么?@learncos2D:虽然它似乎加载图像来创建动画,但它没有动画。您需要给我们一些logcat错误,或者告诉我们您的代码在哪一行不起作用?@SumitKandoi:没有错误,动画没有动画“不起作用”确切的意思是什么?@learncos2D:虽然它似乎加载图像来创建动画,但它没有动画。您需要给我们一些logcat错误,或者告诉我们您的代码在哪一行不起作用?@SumitKandoi:它没有错误,动画没有动画。我试图删除m_grossini->retain();并尝试您的解决方案。但是,动画没有受到影响。我的意思是,它只是显示我添加的精灵,而不是更多。此外,该合一器被称为:(尝试使用CCLayer而不是CCLayerColor。我不明白您为什么要使用它。我更改了所有内容,但没有更改