• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
linux_ios
博客园    首页    新随笔    联系   管理    订阅  订阅

cocos2dx 自定义动画

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }
////    添加4个精灵, 每个精灵用来标示一帧
//    CCSprite * sp1= CCSprite::create("crop1.png");
//    CCSprite * sp2= CCSprite::create("crop2.png");
//    CCSprite * sp3= CCSprite::create("crop3.png");
//    CCSprite * sp4= CCSprite::create("crop4.png");
 
    CCSprite * sp1= CCSprite::create("crop.png", CCRectMake(0, 0, 100, 86));
    CCSprite * sp2= CCSprite::create("crop.png", CCRectMake(100, 0, 100, 86));
    CCSprite * sp3= CCSprite::create("crop.png", CCRectMake(200, 0, 100, 86));
    CCSprite * sp4= CCSprite::create("crop.png", CCRectMake(300, 0, 100, 86));
//    设置一样的坐标
    sp1->setPosition(ccp(100, 180));
    sp2->setPosition(ccp(100, 180));
    sp3->setPosition(ccp(100, 180));
    sp4->setPosition(ccp(100, 180));
    
//    设置2-4帧不可见, 初始化时只显示第一帧
    sp2->setVisible(false);
    sp3->setVisible(false);
    sp4->setVisible(false);
    
//    添加到当前层中 tag 按照顺序0~3
    addChild(sp1,0,0);
    addChild(sp2,0,1);
    addChild(sp3,0,2);
    addChild(sp4,0,3);
    
//    每0.5s调用一次myUpdate(每0.5s切换一帧)
    schedule(schedule_selector(HelloWorld::myUpdate),0.5);
    
    
    return true;
}

void HelloWorld:: myUpdate(float dt)
{
    currentFrameIndex++;
    CCLOG("currentFrameIndex= %i",currentFrameIndex);
//    获取当前所有精灵
    CCArray*array= this->getChildren();
//    防止下标超过最大tag的精灵
    if (currentFrameIndex>=array->count()) {
        currentFrameIndex=0;
    }
//    隐藏所有的精灵
    for (int i = 0 ; i <array->count(); i++) {
        CCSprite*spt =(CCSprite*)this->getChildByTag(i);
        spt->setVisible(false);
    }
//    让下一帧显示出来
    CCSprite *sp = (CCSprite*)array->objectAtIndex(currentFrameIndex);
    sp->setVisible(true);
    
}

.CPP

.h

 

class HelloWorld : public cocos2d::CCLayer
{
public:
    // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
    virtual bool init();

    // there's no 'id' in cpp, so we recommend to return the class instance pointer
    static cocos2d::CCScene* scene();
    
    // a selector callback
    void menuCloseCallback(CCObject* pSender);

    // preprocessor macro for "static create()" constructor ( node() deprecated )
    CREATE_FUNC(HelloWorld);
//    定义一个变量用以标识当前显示的帧下标
    int currentFrameIndex;
//    自定义的更新函数
    void myUpdate(float dt);
};

 

posted @ 2013-04-08 17:26  linux_ios  阅读(541)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3