【iOS-Cocos2d遊戲開發之十】添加粒子系統特效並解決粒子特效與Layer之間的座標問題;

來源:互聯網
上載者:User

 李華明Himi 原創,轉載務必在明顯處註明:
轉載自【黑米GameDev街區】 原文連結: http://www.himigame.com/iphone-cocos2d/472.html

        一直以來Himi特別想在遊戲中使用粒子系統,但是之前做J2me與Android中發現使用粒子做的效果都會造成遊戲運行記憶體的一個負擔,所以一直很遺憾,那麼在iOS遊戲開發中,可以說必須要使用粒子啦,還是蘋果硬體給力;看過我一開始剛寫cocos2d博文的時候我就說過因為cocos2d的粒子編輯器很給力,所以也是我選用cocos2d引擎的一部分原因;            

粒子編輯器名稱:ParticleDesigner,介面如下:

   

       前兩天粒子編輯器購買成功(很便宜,不到10美金,比圖片打包工具TP便宜多了),耍了兩天后有些後悔,因為這個粒子編輯器雖然看介面像是開發編輯器的作者提供了很多的特效一樣,其實都是cocos2d中例子罷了,但是反過來想,人家給做成視覺編輯省去的時間遠遠超值於編輯器的錢了!咳咳,又扯遠了,回到正題;

      至於編輯器或者在cocos2d中添加粒子特效的方法,網上N多資料和教程,這裡就不多說了,下面簡單說今天重點的問題;

      為了讓大家更清楚的知道問題所在,我建立一個cocos2d的項目:

      1. 首先在螢幕中繪製字串(將一個CCLabelTTF對象添加到當前Layer中);

CCLabelTTF *label = [CCLabelTTF labelWithString:@"Welcome--Himi" fontName:@"Marker Felt" fontSize:64];CGSize size = [[CCDirector sharedDirector] winSize];label.position =  ccp( size.width /2 , size.height/2 );[self addChild: label];

      2.然後我將使用粒子編輯器產生的一個類似隕石匯出一個名為“himi.plist”粒子檔案(其中包含粒子的所有屬性),將此檔案匯入項目中並添加到當前layer中;

        //添加一個粒子特效        CCParticleSystem *tempSystem = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"himi.plist"];        //tempSystem.positionType=kCCPositionTypeRelative;//備忘1        tempSystem.positionType=kCCPositionTypeFree;        tempSystem.position=ccp(100,100);          [self addChild:tempSystem];

這裡的備忘1,大家留意下,後面會詳細說,這裡先無視;到此,整個layer中添加了一個字串和一個粒子特效!運行項目 如下:

這裡大概說下,粒子我設定的是一直迴圈播放的,是通過編輯器修改的參數,OK,下面開始到重點了:

    現在我使用一個選取器 [self scheduleUpdate]; ,讓當前的layer的X座標不斷+3,代碼如下:

-(void)update:(ccTime)time{    self.position=ccp(self.position.x+3,self.position.y);}

這裡多嘴一句,在cocos2d座標的修改儘可能的使用整體賦值,比如更改座標,雖然這裡只是更改x軸,但是我仍然對整個position進行的修改;

然後大家都應該知道,當前的layer上的粒子特效和CCLabelTTF都會跟著移動,但是對不起,這裡出現問題,運行如下:

    這裡大家肯定很奇怪,粒子效果應該是垂直的,但是實際卻不是,其實這個問題真的很細節,因為一般粒子特效都是用於很短的時間進行播放-消失;

這裡大概說下,其實特效的的發射器也就是粒子的起始座標其實確實一直跟著layer移動了,但是建立出來後的粒子卻一直顯示在建立時候的座標進行自身運動,並沒有按照我們想象的移動方式進行整體移動;

    講了這麼多其實這個問題一句代碼就解決了,那就是最上面建立粒子特效的代碼的備忘1,

 //tempSystem.positionType=kCCPositionTypeRelative;//備忘1

這個positionType其實就是設定當前粒子特效中所有粒子的位置類型,預設情況下是自由模式,代碼如下:

kCCPositionTypeFree

那麼備忘1的,kCCPositionTypeRelative  是相對模式,所以只要這裡對粒子進行設定位置類型為相對模式即可,問題解決;

           OK,童鞋們該說了,這麼容易描述清楚的問題與解決方案直接說不就好了 =。  =我也這麼想的,但是這裡我需要說兩點:

   1.如果博文上來就針對問題,巴拉巴拉的說一堆,那麼對於還沒接觸粒子這一塊的童鞋而言,一點用沒有,完全是丈二的和尚,xxxx你懂的~

   2.講的這麼多,還是我老說的一句話:細節決定成敗;其實細節也如同基礎,基礎不牢,何談提高?!

    好啦,這一篇就到這裡,繼續忙了;現在時刻:淩成1.24,哎、最近的博文都是夜裡發,第二天誰也看不到,=。  =

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.