iOS_31_cocos2d_粒子系統ParticleSystem,cocos2dios

來源:互聯網
上載者:User

iOS_31_cocos2d_粒子系統ParticleSystem,cocos2dios
最終:

ParticleSystem是基類,ParticleSystem的唯一一個直接子類是:ParticleSystemQuadParticleSystemQuad下面又有n多個子類
當需要自訂粒子系統時,用到的是ParticleSystemQuad,參數是:第3方軟體產生的plist

下面是的粒子系統的繼承結構圖


下面介紹一下【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








Unity3D 中的ParticleSystem中可以夠發射粒子,如果我的粒子是GameObject的實體怎用粒子系統發射?

首先你的知道粒子本質是什麼,就是mesh上面貼點透明貼圖而已,是不能發射3d物體
照你的意思是要粒子系統結合模型做
這個大部分的複雜粒子都是這樣做的
只要粒子和物體同時顯示就行,物體要運動需要做動畫
 
ogre 用粒子編輯器編輯好的粒子指令碼particle 怎在ogre程式中調用?

可以再ogre教程架構的creatScene函數裡添加以下代碼即可:(當然可以在任何地方調用粒子指令碼都行,這隻是個粒子)
void test_particle::createScene(void){ //第一個參數表示粒子系統的名字,隨便起,第二個就是你的粒子系統指令碼,一般在你安裝的ogre sdk路徑的media粒子系統檔案夾下 Ogre::ParticleSystem* ps=mSceneMgr->createParticleSystem("cloud","Examples/Cloud") ; mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ps); // Set ambient light mSceneMgr->setAmbientLight(Ogre::ColourValue(0.5, 0.5, 0.5)); // Create a light Ogre::Light* l = mSceneMgr->createLight("MainLight"); l->setPosition(20,80,50);}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.