你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS_31_cocos2d_粒子系統ParticleSystem

iOS_31_cocos2d_粒子系統ParticleSystem

編輯:IOS開發綜合
最終效果圖: \
\
ParticleSystem是基類, ParticleSystem的唯一一個直接子類是:ParticleSystemQuad ParticleSystemQuad<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjxzdHJvbmc+z8LD5tPW09ButuC49tfTwOA8L3N0cm9uZz48YnI+CgoKPHN0cm9uZz61sdDo0qrX1Lao0uXBo9fTz7XNs8qxLNPDtb21xMrHPHN0cm9uZz5QYXJ0aWNsZVN5c3RlbVF1YWQsPC9zdHJvbmc+PHN0cm9uZz6yzsr9ysc6tdozt73I7bz+yfqzybXEcGxpc3Q8L3N0cm9uZz48L3N0cm9uZz4KPHA+CjxzdHJvbmc+z8LD5srHtcTBo9fTz7XNs7XEvMyz0L3hubnNvDwvc3Ryb25nPjwvcD4KPHA+CjxzdHJvbmc+PGltZyBzcmM9"/uploadfile/Collfiles/20140928/20140928103721124.png" alt="\">

下面介紹一下【Particle Designer】

\

\

\

\

\

生成兩個文件,一個小紋理,一個plist

\

其中plist文件結構如下:

\

自定義粒子特效,使用上面生成的plist文件

\

cocos2d v3版本中,很重要的一點就是:

CCParticleSystemBase替換了以前版本的CCParticleSystem

CCParticleSystem替換了以前版本的CCParticleSystemQuad

因此,在v3以前的版本,自定義粒子時,用CCParticleSystemQuad

因此,在v3之後的版本,自定義粒子時,用CCParticleSystem就可以了

\


CCParticleBatchNode,

同spriteBatchNode一樣,使用同一個紋理創建的多個相同特效的粒子(如位於屏幕不同位置顯示),

可以添加到同一個batchNode中,讓它統一管理;

而場景只需與一個batchNode打交道,界面上顯示的Node也只有一個

//
//  ParticleScene.m
//  31_cocos2D入門
//
//  Created by beyond on 14-9-27.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "ParticleScene.h"

@interface ParticleScene()
{
    // 演示系統自帶的粒子特效
    CCParticleSystem *_particleSystem;
    
    // 顯示粒子特效的名字
    CCLabelTTF *_label;
    
}
@end

@implementation ParticleScene
#pragma mark - 覆蓋父類方法
-(id)init
{
    if (self=[super init]) {
        // 1、場景Node 允許交互
        self.userInteractionEnabled = YES;
        // 2、顯示粒子特效的名字
        _label = [CCLabelTTF labelWithString:@"" fontName:@"Marker Felt" fontSize:30];
        _label.positionType = CCPositionTypeNormalized;
        // 屏幕的右上方 注意這裡是笛卡爾坐標系,原點在左下方
        _label.position = ccp(0.7f, 0.75f);
        _label.horizontalAlignment = CCTextAlignmentRight;
        [self addChild:_label];
    }
    return self;
}
// 直接覆寫,即:不用創建一個sprite In Center
- (void)addSpriteInCenter{}
// 實現父類的方法,添加一個按鈕到屏幕上
- (void)addShowBtns
{
    // 1.使用系統默認的粒子特效
    [self addBtn:@"【系統粒子】" position:ccp(0, 0) target:self sel:@selector(systemParticleClicked)];
    
    // 2.使用粒子設計器
    [self addBtn:@"【粒子設計器】" position:ccp(0, 0.1) target:self sel:@selector(diyParticleClicked)];
    
    // 3.使用ParticleBatchNode
    [self addBtn:@"【粒子Batch】" position:ccp(0, 0.2) target:self sel:@selector(particleBatchNodeClicked)];
}
// 展示系統默認的粒子特效
static int i = 0;
- (void)systemParticleClicked
{
    // 要添加,先移除
    [_particleSystem removeFromParent];
    i++;
    if (i>11) {
        i=1;
    }
    Class cls;
    switch (i) {
        case 1:
            cls = NSClassFromString(@"CCParticleFire");
            break;
            
        case 2:
            cls = NSClassFromString(@"CCParticleFireworks");
            break;
            
        case 3:
            cls = NSClassFromString(@"CCParticleSun");
            break;
            
        case 4:
            cls = NSClassFromString(@"CCParticleGalaxy");
            break;
            
        case 5:
            cls = NSClassFromString(@"CCParticleFlower");
            break;
            
        case 6:
            cls = NSClassFromString(@"CCParticleMeteor");
            break;
            
        case 7:
            cls = NSClassFromString(@"CCParticleSpiral");
            break;
            
        case 8:
            cls = NSClassFromString(@"CCParticleExplosion");
            break;
            
        case 9:
            cls = NSClassFromString(@"CCParticleSmoke");
            break;
            
        case 10:
            cls = NSClassFromString(@"CCParticleSnow");
            break;
            
        case 11:
            cls = NSClassFromString(@"CCParticleRain");
            break;
            
        default:
            break;
    }
    
    _particleSystem = [cls node];
    // 設置自定義紋理和位置後,添加到場景中(默認紋理是fire.png)
    _particleSystem.texture = [CCTexture textureWithFile:@"circle.png"];
    _particleSystem.position = ccp(self.contentSize.width/2,self.contentSize.height*0.3);
    [self addChild:_particleSystem];
    
    
    // 2、顯示粒子特效的名字
    _label.string = NSStringFromClass(cls);
    
}

// 自定義粒子特效,使用粒子設計器
- (void)diyParticleClicked
{
    
    CCParticleSystem *diyParticleSystem = [CCParticleSystem particleWithFile:@"circle.plist"];
    diyParticleSystem.position = ccp(self.contentSize.width/2,self.contentSize.height*0.5);
    // 添加到場景
    [self addChild:diyParticleSystem];
}
// 同spriteBatchNode一樣,使用同一個紋理創建的多個粒子特效,可以添加到同一個batchNode中,讓它統一管理;而場景只需與一個batchNode打交道,界面上顯示的Node也只有一個
- (void)particleBatchNodeClicked
{
//    CCParticleBatchNode *batch = [CCParticleBatchNode batchNodeWithFile:@""];
//    [batch addChild:p1,p2,p3];
}
@end


\

下面是系統自帶的粒子效果,它們全繼承自ParticleSystemQuad

ParticleSystemQuad繼承自:ParticleSystem

注意:自帶的粒子效果,默認要用到一張名為fire.png圖片作為紋理

但,可以通過texture屬性另行設置

\

\

\

\

\

\

\

\

\


圖片編碼:在特殊的plist文件中,通過一個key,包含了一個圖片的所有編碼,從而,創建粒子特效時,不再需要一張.png圖片

如下面的這個plist文件,

最後一項key:textureImageData,裡面所有字串,就代表著一張完整的圖片

從而,無需再另外導入一張.png圖片

\

類似的圖片編碼,還出現在cocos2d屏幕左下角的幀率顯示的數字上面

導演類,決定顯示在下角的幀率數字

\

command+單擊,進入

\

通過再次進入,發現,顯示的幀率,其實是CCFPSLabel

\

通過為_FPSLabel設置string,從而能夠在屏幕左下角顯示幀率

\

那麼,_FPSLabel是如何實例化的呢?它顯示的數字用的紋理是什麼呢?

請看下面這張,重點來了~~~

\

command+單擊進入 getFPSImageData方法

發現指向指針的指針datapointer指向了內存中另一塊區域:

cc_fps_images_ipadhd_png

\

進去之後,發現,這些字串,就是圖片經過編碼後的data







  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved