亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

來源于 一般討論 分類 瘋狂ios講義之cocos2d中的動畫

發布時間:2020-06-27 06:19:13 來源:網絡 閱讀:472 作者:fkJava李剛 欄目:移動開發

cocos2d中的動畫在每一個游戲當中,都有很多各種各樣的動畫效果,比如街頭霸王中的旋風腿,植物大戰僵尸中豌豆的扭動、僵尸的走路、***動作等,雖然簡單的移動動作也可以實現這些功能,但是這樣看上去非常的笨拙和不真實。那么這些效果到底是如何實現的呢?其實很簡單,我們只需要將一系列圖片按照特定的順序排列,然后在精靈對象上執行特定的動畫動作就可以了。
1  cocos2d中動畫相關的類
cocos2d中實現動畫,需要了解以下幾個類。
     q     CCAnimate:該類為一種特殊的動作,也稱為動畫動作。
     q     CCAnimation:該類封裝了一個精靈幀序列和各個精靈幀之間的延遲時間,作為精靈播放動畫的參數。
     q     CCAnimationCache:該類是一個單例,作為一個緩存池來緩存CCAnimation動畫。
2  簡單動畫效果
接下來我們通過示例演示在cocos2d中實現動畫效果。在Xcdoe中使用cocos2d模板創建一個項目,命名為“AnimationTest”,加入準備好的圖片資源,本例為8張植物大戰僵尸中的僵尸圖片,利用這些單獨的圖片創建動畫,完成一個僵尸走路的動畫效果。實現代碼如下。

程序清單:codes/13/13.11/AnimationTest/AnimationTest/HelloWorldLayer.m

  1. -(id) init

  2. {

  3.    if( (self=[super init]) ) {

  4.        CGSize winSize = [[CCDirector sharedDirector] winSize];

  5.        CCSprite* bgSprite = [CCSprite spriteWithFile:@"gamebg.png"];

  6.        bgSprite.position = ccp(winSize.width/2,winSize.height/2);

  7.        [self addChild:bgSprite];

  8.        // 創建僵尸精靈,并設置坐標位置在屏幕之外

  9.        CCSprite* zSprite = [CCSprite spriteWithFile:@"z_00_01.png"];

  10.        zSprite.position = ccp(winSize.width+zSprite.contentSize.width/2,winSize.height/2);

  11.        [self addChild:zSprite];

  12.        // 創建CCAnimation動畫,指定動畫幀的內容

  13.        CCAnimation* anim = [CCAnimation animation];

  14.        [anim addSpriteFrameWithFilename:@"z_00_01.png"];

  15.        [anim addSpriteFrameWithFilename:@"z_00_02.png"];

  16.        [anim addSpriteFrameWithFilename:@"z_00_03.png"];

  17.        [anim addSpriteFrameWithFilename:@"z_00_04.png"];

  18.        [anim addSpriteFrameWithFilename:@"z_00_05.png"];

  19.        [anim addSpriteFrameWithFilename:@"z_00_06.png"];

  20.        [anim addSpriteFrameWithFilename:@"z_00_07.png"];

  21.        [anim addSpriteFrameWithFilename:@"z_00_08.png"];

  22.        // 創建animAction動畫,restoreOriginalFrame:YES

  23.        // 可以讓精靈對象在動畫執行完后恢復到最初狀態

  24.        id animAction = [CCAnimate actionWithDuration:1.5f animation:anim

  25.            restoreOriginalFrame:YES];

  26.        // 定義一個動作,重復執行CCAnimate動畫

  27.        id repeatanimAction = [CCRepeatForever actionWithAction:animAction];

  28.        // 定義一個動作,讓精靈對象移動到特定的位置

  29.        id moveTo = [CCMoveTo actionWithDuration:10.0f

  30.            position:ccp(-zSprite.contentSize.width/2,winSize.height/2)];

  31.        // 僵尸精靈重復執行動畫動作和移動動作

  32.        [zSprite runAction:repeatanimAction];

  33.        [zSprite runAction:moveTo];

  34.    }

  35.    return self;

  36. }

復制代碼
上面代碼首先在屏幕中添加了一個背景精靈圖片,然后創建了一個僵尸精靈,最后使用8張圖片創建了一個簡單的僵尸行走動畫,并讓僵尸精靈對象反復執行該動畫并移動。這樣就完成了一個僵尸從屏幕一邊走到另一邊的動畫效果。單擊“Run”按鈕執行AnimationTest項目,模擬器顯示如圖13.48所示。

來源于 一般討論 分類 瘋狂ios講義之cocos2d中的動畫



3  使用精靈表單實現動畫效果
上一節實現了一個簡單的動畫效果,在實際開發工作當中,通常會使用更加高效的方式來完成動畫,就是使用我們前面介紹過的精靈表單。上一節使用單獨的精靈,每次都需要調用OpenGL ES的繪圖命令,速度會大大降低;而如果使用精靈表單,無論紋理圖集上有多少精靈,只需要調用一次繪圖命令即可。所以使用精靈表單,可以大大提升游戲的性能。
首先按照13.9.6節制作精靈表單的步驟,將所有的圖片制作成精靈表單。
加載圖片。把所有的精靈圖片拖動到Zwoptex的空白處,然后單擊工具條上的“Layout”按鈕,顯示效果如圖13.49所示。
來源于 一般討論 分類 瘋狂ios講義之cocos2d中的動畫

 ② 單擊工具條上的“publish Settings”按鈕,在Texture下的“Save To File”處設置生成的PNG文件名和路徑,在Coordinates下的“Save To File”處設置生成的plist文件名和路徑,完成后單擊“Done”按鈕保存設置。
 ③ 單擊上方左側的“Publist”按鈕生成所需要的plist文件和PNG文件。
接下來我們使用精靈表單來實現動畫效果。在Xcdoe中使用cocos2d模板創建一個項目,命名為“AnimationCacheTest”,加入準備好的plist文件和圖片資源。實現代碼如下。
程序清單:codes/13/13.11/AnimationCacheTest/AnimationCacheTest/HelloWorldLayer.m
  1. -(id) init

  2. {

  3.    if( (self=[super init]) ) {

  4.        CGSize winSize = [[CCDirector sharedDirector] winSize];

  5.        // ①讀取plist文件將精靈幀紋理添加到精靈幀緩存當中

  6.        [[CCSpriteFrameCache sharedSpriteFrameCache]

  7.            addSpriteFramesWithFile:@"animation.plist"];

  8.        // ②創建一個精靈表單

  9.        CCSpriteBatchNode* batchNode = [CCSpriteBatchNode

  10.            batchNodeWithFile:@"animation.png"];

  11.        // ③將精靈表單作為層的子節點添加到層當中

  12.        [self addChild:batchNode];

  13.        // ④創建背景精靈添加到精靈表單中

  14.        CCSprite* bgSprite = [CCSprite spriteWithSpriteFrameName:@"gamebg.png"];

  15.        bgSprite.position = ccp(winSize.width/2,winSize.height/2);

  16.        [batchNode addChild:bgSprite];

  17.        // ⑤創建僵尸精靈,設置坐標位置在屏幕之外

  18.        CCSprite* zSprite = [CCSprite spriteWithSpriteFrameName:@"z_00_01.png"];

  19.        zSprite.position = ccp(winSize.width+zSprite.contentSize.width,winSize.height/2);

  20.        // ⑥創建一個數組用來保存動畫

  21.        NSMutableArray* array = [NSMutableArray array];

  22.        // 遍歷所有圖片,然后從精靈幀緩存中獲取與圖片名稱相對應的精靈幀保存到數組當中

  23.        for(int i = 1;i<=8;i++){

  24.            NSString* fileName = [NSString stringWithFormat:@"z_00_0%i.png",i];

  25.            CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache]

  26.                spriteFrameByName:fileName];

  27.            [array addObject:frame];

  28.        }

  29.        // ⑦創建一個動畫并設計成重復動作

  30.        id animation = [CCAnimation animationWithSpriteFrames:array delay:0.1f];

  31.        id animate = [CCAnimate actionWithAnimation:animation];

  32.        id repeate = [CCRepeatForever actionWithAction:animate];

  33.        // ⑧創建一個CCMoveTo讓精靈移動到特定的位置

  34.        id moveTo = [CCMoveTo actionWithDuration:10.0f

  35.            position:ccp(-zSprite.contentSize.width/2,winSize.height/2)];

  36.        // ⑨讓僵尸精靈運行動畫和移動動作

  37.        [zSprite runAction:repeate];

  38.        [zSprite runAction:moveTo];

  39.        // ⑩將僵尸精靈添加到精靈表單中

  40.        [bgSprite addChild:zSprite];

  41.    }

  42.    return self;

  43. }

復制代碼

上面程序中,編號①代碼讀取animation.plist文件將精靈幀紋理添加到精靈幀緩存當中。編號②代碼根據animation.png文件創建一個精靈表單。編號③代碼將精靈表單作為層的子節點添加到層當中。編號④代碼創建背景精靈添加到精靈表單中。編號⑤代碼創建僵尸精靈,并設置坐標位置。
編號⑥代碼創建一個數組,并遍歷所有圖片,然后從精靈幀緩存中獲取與圖片名稱相對應的精靈幀保存到數組當中。編號⑦代碼創建動畫對象并傳入精靈圖片幀數組,同時指定動畫的播放速度,然后將動畫設計成一個重復的動作。編號⑧代碼創建一個CCMoveTo讓精靈移動到特定的位置。

編號⑨代碼讓僵尸精靈執行動畫和移動的動作。編號⑩代碼將僵尸精靈添加到精靈表單中。

通過以上步驟,我們就完成了通過精靈表單創建cocos2d動畫效果的過程。單擊“Run”按鈕執行AnimationCacheTest項目,模擬器顯示和直接使用圖片幀創建動畫的效果一樣。使用精靈表單可以大大提升游戲的性能,在實際的項目開發當中應該更多地采用精靈表單的方式加載所有的精靈對象。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伽师县| 绥芬河市| 建瓯市| 武汉市| 淳安县| 迁西县| 阿拉善左旗| 沁水县| 上林县| 聂荣县| 平遥县| 浮梁县| 武隆县| 柯坪县| 阜新市| 岱山县| 南江县| 玉溪市| 麻江县| 合江县| 万源市| 湘阴县| 来凤县| 永安市| 阜南县| 阿鲁科尔沁旗| 荣成市| 铜鼓县| 嘉义市| 富民县| 洪江市| 太谷县| 浏阳市| 鸡泽县| 临颍县| 陵川县| 汶上县| 九龙县| 奈曼旗| 龙川县| 普宁市|