1. 程式人生 > >Cocos2d-x 3.0心得(02)-粒子的位置型別(PositionType)

Cocos2d-x 3.0心得(02)-粒子的位置型別(PositionType)

cocos2dx的粒子系統有三種位置型別,對我來說最常用的算是FREE了,因為這種粒子,一旦發射,位置就不會再跟隨粒子系統的Node(包括其父Node),移動粒子系統的話,可以形成所謂的“拖尾”,看起來更自然。

free粒子的位置,仍然是在粒子系統下的本地空間座標(雖然從理論上,free粒子一旦發射,就應當成為世界空間的一元,其座標變換跟粒子系統的節點、發射器不再有關係),因為影響器的引數,是在粒子系統的本地空間設定。

渲染粒子的時候,需要把粒子的位置,從本地空間變換到世界空間。如果粒子系統節點的位置發生變化,會反應到這一變換過程中,結果就是粒子會跟著節點一起移動,無法形成“拖尾”的效果。

為了實現free粒子在世界空間自由運動的效果,cocos2dx的做法是,在每一幀更新粒子座標(在本地空間)後,給座標作一次修正,然後用修正後的座標,參與渲染的計算。這次修正的作用,就是要抵消掉粒子系統節點或者其父節點的位置變化,使得粒子看起來就像是世界空間中自由運動一樣。

比如說,某個粒子系統P,直接掛在scene下,座標是(100,200),發射了一顆粒子,粒子在P下的座標是(0,0),那麼粒子在整個scene下的座標就是(100,200)。

假設粒子水平向右移動10,那麼它在P下的座標就成了(10,0),而在scene下則是(110,200)。

如果在同時,P向左移動了50,座標變成(50,200),那麼粒子在P下的座標不變,仍然是(10,0),但在scene下則是(60,200)。

對於free粒子來說,則不能受P向左移動50的影響,需要保持在scene下(110,200)的位置。

cocos2dx所作的修正,就是在發射粒子時,計算並記下此刻粒子系統的世界座標(上例中的(100, 200))。然後,在每幀更新粒子座標時,再次計算這時粒子系統的世界座標(上例的(50, 200)),相減的差值,加到粒子上,這樣粒子在P下的座標就是(60,0),變換到scene下後就是(110,200)。這個修正後的座標(60,0),不會被記錄下來,下一幀會重新根據P的新座標再修正。

如果沒特別的需求,這是ok的。但是如果粒子系統或者其父層節點進行縮放、旋轉、傾斜之類的操作,就會發現,當粒子系統在移動的時候,粒子亂套了。因為cocos2dx是用世界空間的座標差值,來修正一個本地空間的座標,而這兩個空間,一旦參照的座標尺寸不一致,就會發生混亂。

以上面的例子,假設P被縮放為(0.5,0.5)。由於P在移動後,本身的座標還是(50,200),對粒子進行修正的時候,差值仍然是(50,0),那麼粒子被修正後,在P下的座標還是(60,0)。然後,當把粒子變換到世界空間時,由於P的縮放比例(0.5,0.5),所以粒子的世界座標實際上是 x = 60 * 0.5 + 50 = 80,y = 0 * 0.5 + 200 = 200,結果就是(80,200),而不是預期的(110,200)。

目前我的解決方案,不對free粒子作修正,而是按照理論的方式,每一幀直接計算粒子的世界座標。具體來說:

1、初始化一個粒子時,記錄下此時粒子系統相對於世界的變換矩陣,這個矩陣可以把一個粒子系統本地座標,變換成世界座標;另外,這個矩陣是每個粒子獨有的;

2、每一幀仍然計算粒子在粒子系統中的本地座標,但在用它計算4個頂點座標時,乘上步驟1得到的矩陣;

3、步驟2得到的頂點座標,實際上是在世界空間的座標,所以,需要禁用掉visit(或者draw)裡面,對粒子座標的變換。忽略掉作為引數傳入的transform,用一個單位矩陣代替。

這樣就大功告成了。

相關推薦

Cocos2d-x 3.0心得02粒子位置型別PositionType

cocos2dx的粒子系統有三種位置型別,對我來說最常用的算是FREE了,因為這種粒子,一旦發射,位置就不會再跟隨粒子系統的Node(包括其父Node),移動粒子系統的話,可以形成所謂的“拖尾”,看起來更自然。 free粒子的位置,仍然是在粒子系統下的本地空間座標(雖然從

Cocos2d-x 3.0心得05音效管理

相對於bgm,想自由的控制音效要麻煩不少,而且這種枯燥的東西恐怕也沒幾個人能耐下性子慢慢研究,算是作個記錄吧。 跟bgm一樣,下面的東西只針對iOS有效,移植其他平臺,還是老老實實用SimpleAudioEngine更輕鬆。 cocos裡面,音效的播放原理大致有兩步,讓我

Cocos2d-x 3.0心得04BGM管理

用cocos2dx播放音樂音效算是很簡單的事了,沒什麼特殊需求的話,用SimpleAudioEngine就可以搞定。不過特殊需求總是會出現的。要是你經常聽歌,應該會有印象,某些播放器在切換音樂的時候,正在播放的音樂會逐漸淡出直到消失,然後才會播放新的音樂。如果想在遊戲裡也實

Cocos2d-x 3.0 開發十二在CocoStudio中使用粒子掛載與曲線動畫

1、概述    最新版本的CocoStudio在修復之前Bug的同時,加入了新功能,粒子掛載和曲線動畫就是其中的亮點。下面我們就動手做個例子,先上圖:    2、粒子掛載    執行CocoStudio

Cocos2d-x 3.0開發點選互動的四種處理

1、概述    遊戲也好,程式也好,只有能與使用者互動才有意義。手機上的互動大致可以分為兩部分:點選和輸入。其中點選更為重要,幾乎是遊戲中全部的互動。在Cocos2d-x 3.0中,更改了dispatc

Cocos2d-x 3.0 開發在程式中處理cocoStudio匯出動畫

1、概述    使用cocoStudio可以方便的製作動畫,接下來的工作就是在我們的程式中使用製作的動畫。這篇中,我將使用程式將兩個動畫連線起來。有圖有真相:2、製作動畫    承接上一篇,我們再製作一

Cocos2d-x 3.0開發十三使用CocoStudio編輯幀事件並關聯到程式

1、概述    幀事件也是新加入的功能。這篇中我們將看到如何使用它。我們將上篇中製作的動畫稍加修改。有圖為證:2、用途與原理    首先介紹一下幀事件。正如其名:一個與幀相關聯的事件。    為什麼要這

Cocos2d-x 3.4 之 消滅星星 > 第三篇 <

周期 ack ini 顏色 博客 ec2 width pri mp3格式 ***************************************轉載請註明出處:http://blog.csdn.net/lttree************************

cocos2d-x 3.4 之 三消類遊戲——萬聖大作戰附加篇

***************************************轉載請註明出處:http://blog.csdn.net/lttree******************************************** 三消遊戲——萬聖大作戰,應該是

Cocos2d-x 3.0 打造一個全平臺概念文件夾

android cocos2d www 全平臺 -s http 概念 1-1 style Cocos2d-x 3.0 打造一個全平臺概念文件夾http:// www.eoeandroid.com/thread-328055-1-1.html Cocos2d

cocos2d-x 3.0 final 移植 android

filename details blank each 連接 python 頭文件 osd 需求 準備工作 你僅僅要依照上一篇的 cocos2d-x 3.0 final 環境搭建 完畢就能夠了 1.編輯proj.android\jni\Android.mk,更改內

[Cocos2d-x v3.x]Mac OX 創建新的Cocos2d-x 3.0 項目

tor cor code none cocos 分享 oid folder left 文章內容來自於: http://cocos2d-x.org/wiki/How_to_Start_A_New_Cocos2D-X_Game Mac OS X 10.9 So

cocos2d-x 3.0 播放MP4視頻

獲取 cocos2 con selector lba 技術 root csdn 移除 猴子原創,歡迎轉載。轉載請註明: 轉載自Cocos2D開發網–Cocos2Dev.com,謝謝。原文地址: http://www.cocos2dev.com/?p=545非常久曾經寫的一

cocos2d-x 3.0 經常使用對象的創建方式

strong array 5% eat 自己 ++ -a 緩存 print cocos2d-x 3.0 中全部對象差點兒都能夠用create函數來創建,其它的創建方式也是有create函數衍生。 以下來介紹下create函數創建一般對象的方法,省得開發中常常忘記啥的。

cocos2d-x 3.0 Loading界面實現

int start popu tor controls lec -a ttf 提高 信息 這個世界每一天都在驗證我們的渺小,但我們卻在努力創造,不斷的在這生活的畫卷中留下自己的腳印。或許等到我們老去的那一天,老得不能動僅僅能靠回顧的那一天。你躺在輪椅上,不斷的回顧過

cocos2d-x 3.0的坑有哪些

命令行 工程文件 模擬 directory file run eclipse setup.py ports 問題一:setup.py 之後, ANT文件夾為什麽創建不成功? ANT文件夾要指定到bin以下,NDK和SDK則指定要根文件夾就可以 問題二:cocos

用 批處理 安裝,編譯 Cocos2d-X 3.0---Windows

align 而且 ble java jdk its 微軟雅黑 ndk files 本文檔適用: Win7 32bits(XP 32bits可能適用,未測試)開發目標環境 Android 軟件版本號 2014年5月下載,當時為較新版本號. 由於Cocos2d-X從

cocos2d-x 3.0遊戲實例學習筆記《卡牌塔防》第一步---開始界面&關卡選擇

cocos2d-x 版本號 blog evel nbsp 不同 null menuitem obj /* 說明: **1.本次遊戲實例是《cocos2d-x遊戲開發之旅》上的最後一個遊戲,這裏用3.0重寫並做下筆記 **2.我也問過木頭本人啦。他說:

關於cocos2d-x 3.0的點擊交互處理

clipboard 3.0 static php 此外 eas -h con spl 轉自:http://blog.csdn.net/fansongy/article/details/12716671 1、概述 遊戲也好,程序也好,僅僅有能與

Cocos2d-x 3.0 基礎系列一】 各類回調函數寫法匯總

void ont white fort instance gles dir ner mdi 一、button回調 1. Lambda 表達式,C++11 Lambda 賦予了Cocos2d-x 3.0創建回調函數的靈活性。 auto it