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