2015年10月22日 星期四

GameMaker:Studio 學習筆記6

36、Code Particle:

part_type_scale(ind,xscale,yscale):設定基於原始形狀的x,y比例,作用在size之前,故size是基於套用x,y比例之後的形狀做縮放

part_type_size(ind,size_min,size_max,size_incr,size_wiggle):與DnD模式相同,只多了1個wiggle屬性,wiggle的值允許設定為-20~20之間,作用方式如下:

以size為例,每個step會在"基本值-wiggle ~ 基本值+wiggle"區間內對基本值進行wiggle/4的增減動作,在size基本值為4條件下,size變化區間如下:

4-wiggle,4-3/4wiggle,4-2/4wiggle,4-1/4wiggle,4,4+1/4wiggle,4+2/4wiggle,4+3/4wiggle,4+wiggle

一開始會先隨機決定走向(添加或減去)以及起始位置,從起始位置開始往遞增或遞減方向開始每step增加或減少wiggle/4值,隨著step前進,目標屬性值(例如size)就會呈現一個在上下限值兩極間折返跑的狀況,觸及上限往回直到觸及下限,再往回直到觸及上限。

以下運作範例幫助瞭解:

在part_type_size(test,4,4,0,4)的設定下,假設起始隨機選定走向為遞增,起始位置為-3/4wiggle,變化過程如下:

4-3/4*4=1 > 1-1/4*4=0 > 0+1/4*4=1 > 2 > 3 > 4 > 5 > 6 > 7 > 8 > 7 > 6 > 5 > 4 > 3 > 2 > 1 > 0 > 1 > etc...

注意事項:

以size為例,最小值為0,當變化結果值為負時,自動轉換為正值呈現,但下次運算仍以原值(負值)代入運算式,運作邏輯不變,範例如下:

在part_type_size(test,2,2,0,4)的設定下,假設起始隨機選定走向為遞減,起始位置為-3/4wiggle,變化過程如下:

2-3/4*4=-1,結果不得為負,結果轉為正值=1 > -1(為上一個step的運算結果)-1/4*4=-2,不得為負轉為正值=2 > -2+1/4*4=-1,不得為負,轉為正值=1 > -1+1/4*4=0 > 1 > 2 > 3 > 4 > 5 > 6 > 5 > 4 > 3 > 2 > 1 > 0 > 1 > 2 > 1 > 0 > 1 > 2 > 3 > 4 > 5 > 6 > 5 > 4 > 3 > 2 > 1 > 0 > 1 > 2 > 1 > 0 > 1 >2 > 3 > 4 > 5 > 6 > etc...

size_incr的遞增量是額外獨立運作,不影響wiggle運作邏輯,範例如下:

在part_type_size(test,2,2,1,4)的設定下,假設起始隨機選定走向為遞減,起始位置為-2/4wiggle,變化過程如下:

2-2/4*4+1=1,1-1/4*4+1=1,1-1/4*4+1=1,1+1/4*4+1=3,3+1/4*4+1=5,5+1/4*4+1=7,9,11,13,15,17,17,17,17,17,17,17,17,17,19,21,23,25,27,29,31,33,33,33,33,33,33,33,33,33,etc...

part_type_colour2(partind,colour1,colour2):設定兩個顏色,在lifetime過程中由c1漸變到c2

part_type_colour3(partind,colour1,colour2,colour3):設定三個顏色,在lifetime過程中由c1漸變到c2再漸變到c3

part_type_orientation(ind,ang_min,ang_max,ang_incr,ang_wiggle,ang_relative):設定particle的sprite角度,ang_relative設為true(1)表示以行進方向做為particle的sprite的初始角度,設為false(0)則原始角度不變(預設為0,正右方)

part_type_blend(ind,additive):添加漸亮效果於目標particle,會使其逐漸明亮發光

part_particles_create(ind,x,y,parttype,number):在指定點產生指定數量的指定particle system的指定particle type

part_particles_create_colour(ind,x,y,parttype,colour,number):以指定的顏色產生particle

part_particles_count(ind):傳回指定particle system產生的particles現存數量

需注意particle system,particle type以及emitter的建立都會佔用記憶體並且都有個別的index id,在使用上要特別小心,養成用不到就即刻刪除的習慣

part_emitter_region(ps id,emitter id,xmin,xmax,ymin,ymax,shape,distribution):設定指定particle system的指定emitter的方形範圍(4點定義)以及shape和particle產生位置所遵循的分配(統計上的分配),和DnD相比多了一個distribution屬性(準確的說在DnD模式distribution是隱藏屬性,不可更改,預設為linear線性分配,特徵是平均),distribution的運作方式以下列範例幫助理解:

part_emitter_region(ps id,emitter id,200,400,100,300,ps_shape_ellipse,ps_distr_linear)產生的圖形如下,黑色方形區域是emitter區域,白色點是particle產生位置,線性分配的特徵是平均分佈


part_emitter_region(ps id,emitter id,200,400,100,300,ps_shape_ellipse,ps_distr_gaussign)產生的圖形如下,高斯分配的特徵是多數處於中間位置


part_emitter_region(ps id,emitter id,200,400,100,300,ps_shape_ellipse,ps_distr_invgaussign)的圖形如下,逆高斯分配的特徵是多數處於邊緣位置


part_emitter_burst(ps id,emitter id,p id,number):以指定particle system的指定emitter"產生1次"指定數量的particle(同時產生)

part_emitter_stream(ps id,emitter id,p id,number):與burst的差別在於burst1次指令只會產生1次指定數量的particle,而stream則是每個step都會產生1次,另外stream模式的number參數可為負數,負數代表產生particle的機率,例如設為-5,代表每個step都有1/5的機率會產生"1個"particle

stream模式依設定值可能在短時間內產生非常大量的particle同時存在,例如過長的particle lifetime或者過大的單次產生批量,而導致遊戲速度變慢,故使用時需注意particle lifetime以及產生批量的平衡,以免拖慢遊戲速度

part_type_sprite(ind,sprite,animate,stretch,random):以指定sprite做為指定particle type的顯示圖形,各參數用途:

sprite:指定particle的sprite

animate:若指定的sprite有多個sub-images,則此參數設定是否要有動畫效果

stretch:設定是否要讓動畫播放1個循環的時間與particle的lifetime相同,依據lifetime調整動畫播放的速度,讓動畫播完1個循環的時間和particle lifetime一樣,例如若sprite有5個sub-images,而particle的lifetime為10,則設為不同步(false)的情況下,particle的sprite每個step播放1張,故lifetime過程中會播放兩個循環(10/5)的動畫;若設為同步(true)則變成每2個step播放1個sub-image,在lifetime過程中只會播放1次循環 ,若lifetime比sub-image少,則變成快轉,以lifetime為3,sub-image有6個為例,變成每step播放兩張sub-image(實際上中間那張不會顯示出來,會直接被跳過)

random:設定是否隨機抽選起始的sub-image,以原本有5張sub-images為例,正常播放順序是0,1,2,3,4,若設為隨機則首張為隨機決定,之後則依序,例如首張抽到3,則會以3,4,0,1,2的順序播放

part_type_step(ind,step_number,step_type):在指定ind particle存在期間,每step從其所在位置產生指定數量的指定particle,step_number可設為負數,設為負數的效果可參照part_emitter_stream的說明

注意若使用相同的particle為step_type,會形成無限迴圈,可能拖慢遊戲速度甚至當掉,使用上需當心

part_type_death(ind,death_number,death_type):在指定ind particle的lifetime結束時,從其所在位置一次性產生1批指定數量的指定particle(同時產生),death_number可設為負數,設為負數的效果可參照part_emitter_stream的說明

注意若使用相同的particle為death_type,會形成無限迴圈,可能拖慢遊戲速度甚至當掉,使用上需當心

網路上已經有很多使用者分享出來的particle資源,可多加利用

另外需注意在HTML5上執行particle速度比較慢,而且如果它沒開啟WebGL,則color blending也無法使用

37、0可代表false,節省key-in時間

沒有留言:

張貼留言