sprites- 調整 sprite scale 和 twist
效果開始合成一起,但是還有改進的余地。當創建一個 sprite 基礎上的效果的時候, sprites 頂部每個分層都賦予它最終效果。利用不同的縮放值和扭曲值并在此基礎上動畫,可添加角色到模擬。
為粒子物體添加以下的動力學屬性,方法和你添加 spritnumpp 屬性一樣:
spritescalexpp
spritescaleypp
spritetwistpp
在 add attibute 窗口 new 欄目里,保留 float,per particle 屬性添加以下屬性:
randxpp
randypp
randtwistpp
spritetwistmultpp
spritescalemultpp
給 spritetwistmultpp 和 spritescalemultpp 貼上凹凸貼圖,重新命名這些貼圖,名字要能正確反映他們要連接的屬性,可以命名為 spritetwistramp , spritescaleramp 等等。反過來,于 spritetwistmultpp 有聯系的 rump 貼圖,底端設為 black ,頂端設為 white 。
打開粒子物體需要的 creation expression 并鍵入:
//generate random numbers for x and x
//
float $randx=rand(0.3,1.3)
float $randy=rand(0.8,1.2)
//store a random number for x and y
//
//
randxpp=$randx
randypp=$randy
//set spritescalexpp and spriteypp
//
spritescalexpp=0
spritescaleypp=0
//set randtwistpp
//
randtwistpp=rand(-180,180)
每個粒子 x,y,twist 的數值都是任意指派的,這些值會賦予每個粒子獨特的特征,并會被用在 runtime expression 里。既然我們用 rand 功能生成值并且邊緣功能返回結果總是不一樣,那么,我們就在單粒子屬性里保存這些值,以便以后使用。
用 rump 給 spritetwistmultpp 和 spritescalemultpp 貼圖,也可將它們作為增效器,并給我們一個插值,但是,能否給我們一個 interpolation ,那就要看粒子的年齡如何??梢杂贸R幈磉_式控制扭曲和放縮值,但是在控制基于時間的屬性改變上,增加一個由 rump 控制的乘數,會給我們更大的控制靈活性。
為什么用 0 值初始化 spritescaleypp 和 spritescaleypp ?因為 cg/upload/200904/ 的一個 bug , rump 在 creation 上沒有正確估算,產生了不可預料的結果。
打開粒子物體需要的 runtime expression 并鍵入:
//set spritescalexpp and spritescaleypp
//
spritescalexpp =spritescalex* spritescalemultpp*randxpp;
spritescaleypp=spritexcaley*spritescalemultpp*randypp*randxpp
為 sprite 渲染類型創建默認屬性時, cg/upload/200904/ 添加了一個 spritescalex, spritescaley 和 spritetwist 屬性。如果沒有這些屬性的單粒子版本,比如 spritescalexpp , cg/upload/200904/ 就會用 scalar 屬性代替,例如 spritescale 。既然有了這些屬性的單粒子版本,縮放版本就被忽略了。我不忽略它們,在全局增效器中,我習慣用他們作為表達式的一部分。用一個你眾所周知的屬性名字,這個名字不僅用在保存創建一個新屬性階段(作為增效器),也展示給使用者一個屬性——具有相似的方式相似的功能。在通道盒里改變 spritescalex 或 spritescaley ,這會改變粒子總值。
在下面一行中:
spritescalexpp= spritescaley* spritescalemultpp*randypp*randxpp;
spritescaleypp 和 spritescalexpp 的值大體相當,回到 creation expression, randypp ,隨意初始化一個值—— 0.8 至 1.2 之間,這會導致 sprite 在 x 軸成矩形的—— +/-20% 。
添加下面幾行到 runtime expression :
//spritetwistpp
//
spritetwistpp+= spritetwistmultpp*sign(spritetwistpp)* spritetwist;
如果值是正的,用 sign 功能返回 1 ;如果值是負的,用 sign 功能返回 -1 。 spritetwist 屬性是用用默認 sprite 屬性創建的,在這種情況下,我們添加它的值到當前 sprite 的 twist 上,引起 sprite 每幀旋轉。利用 spritetwistmultpp ,你可以改變每個 sprite twist 的速率, sprite 越大,自轉越慢。
此時,你可以開始回放場景,交互式地調整被當作 sprite
[1] [2] 下一頁
新聞熱點
疑難解答