天天看點

CoCos2d-x 通過幀顯示動畫

#ifndef   __HELLOWORLD_SCENE_H__ #define   __HELLOWORLD_SCENE_H__

#include   "cocos2d.h"

class   HelloWorld   :   public   cocos2d ::   CCLayer { public :         // 初始化         virtual   bool   init ();

        // 傳回一個特定的場景         static   cocos2d   :: CCScene *   scene ();

        // 創造一個HelloWorld 的函數         CREATE_FUNC ( HelloWorld   );

        // 定義一個變量 以辨別目前顯示的 下标         int   nCurrentFrameIndex   ;

        // 自定義更新函數         void   myUpdate   ( float   dt ); };

#endif

#include   "HelloWorldScene.h" #include   "../CocosDenshion/win32/MciPlayer.h" //#include "cocos2d-x-2.2.0/CocosDenshion/win32/MciPlayer.h"

using   namespace   cocos2d ; using   namespace   CocosDenshion ;

// 傳回一個特定的場景 CCScene *   HelloWorld :: scene   () {         // 建立一個場景         CCScene *   scene   =   CCScene ::   create ();

        // 将 HelloWorld 層加到場景 之中         HelloWorld *   layer   =   HelloWorld ::   create ();         scene -> addChild   ( layer );         return   scene   ; }

// 對HelloWorld的場景進行初始化 bool   HelloWorld   :: init () {         bool   bInitSucceed   =   false ;               if (! CCLayer   :: init ())         {              return   bInitSucceed   ;         }

        // 添加4個精靈, 每個精靈用來辨別1針         CCSprite *   frame1   =   CCSprite :: create   ( "CloseNormal.png" );         CCSprite *   frame2   =   CCSprite :: create   ( "CloseSelected.png" );         CCSprite *   frame3   =   CCSprite :: create   ( "HelloWorld.png" );

        // 設定一樣的坐标         frame1 -> setPosition   ( ccp (   100 ,   180 ));         frame2 -> setPosition   ( ccp (   100 ,   180 ));         frame3 -> setPosition   ( ccp (   100 ,   180 ));

        // 設定2~3針不可見         frame2 -> setVisible   ( false );         frame3 -> setVisible   ( false );

        // 添加到目前層中, tag 按照順序0~2         addChild ( frame1   ,   0   ,   0   );         addChild ( frame2   ,   0   ,   1   );         addChild ( frame3   ,   0   ,   2   );

        // 設定定時器  每 0.5S 調用一次 myUpdate(每0.5S切換一次針)         schedule ( schedule_selector   ( HelloWorld ::   myUpdate ),   0.5 );         return   true   ; }

// 每 0.5S 更新一次定時器 void   HelloWorld   :: myUpdate (   float   dt   ) {         static   int   sCurrentFrameIndex   =   0   ;      

        // 擷取目前的所有精靈         CCArray *   array   =   this ->   getChildren ();         int   nArrayCount   =   array -> count   ();         if ( 0   ==   nArrayCount )         {              return   ;         }

        // 隐藏所有的精靈         for ( int   i   =   0   ;   i   <   nArrayCount ;   i ++)         {              // 根據 Tag 索引每一幀并設定不可見              CCSprite *   spT   =   ( CCSprite *)   this -> getChildByTag   ( i );              spT -> setVisible   ( false );         }

        // 讓下一幀顯示出來         CCSprite *   sp   =   ( CCSprite *)   this -> getChildByTag   ( sCurrentFrameIndex );         sp -> setVisible   ( true );         sCurrentFrameIndex ++;

        // 設定下标         if ( sCurrentFrameIndex   ==   nArrayCount )         {              sCurrentFrameIndex   =   0 ;         } }