2015年10月21日 星期三

GameMaker:Studio 學習筆記3

21、語法:

內建functions(橙色):

with:指定程式碼對象(對象物件,言下之意,此物件的所有instance都會被影響),可在A instance中寫套用在B物件instances的程式碼,且當指定物件不存在時,不會發生error

random(上限值):隨機傳回0~上限值中的1個整數

audio_sound_pitch(index,pitch):設定音效的音調,預設值為1,小於1會降低音調,大於1會提高音調

move_bounce_all(boolean):允許呼叫instance與所有其他instance碰撞時反彈,參數true表示精確偵測,需要更多的計算,可能會拖慢遊戲速度,需小心使用,參數false為一般偵測

other:特殊參照語法,指碰撞事件中自身以外的instance

var:宣告local變數

choose(argu1,argu2...argu16):從給定的選項中隨機傳回1個,需注意這個function隨機的結果是依random seed決定,一樣的random seed會產生一樣的結果,而每次重新開始遊戲的seed是相同的,除非關閉遊戲再開,這種特徵適合用來debug,若不想有這樣的特徵,可以透過randomize或random_set_seed functionln來避免

the switch statement:指定1個變數,並依據指定的變數值執行不同的程式碼,類似if,條件選項多時較if便利,詳情可參閱語法說明

mediian(argu1,argu2......argu16):傳回給定實數裡的中位數,可用來限制移動空間,例如:

x = median(0,x,room_width),x座標介於上下限之間時,不受影響,但當x座標超出下限,傳回的值就會是下限,產生限制x座標的效果,上限同理

background_index[0]~[7]:指定背景給room,1個room最多指派8個背景,設定為-1可移除背景

lengthdir_x(len,dir):傳回指定長度和角度的直角x向量


lengthdir_y(len,dir):傳回指定長度和角度的直角y向量

image_angle:傳回sprite現在的角度,在editor的狀態是0度(右為0,順時增加),當sprite有旋轉,角度就會變

draw_text(x,y,string):繪製文字,實數需以string()function轉為文字,可使用"+"號組合文字,使用"#"換行,若要繪製"#"號,需在#號前加"\"符號,例如"\#"會繪製#,要繪製雙引號需在雙引號前加單引號,例如'Say "Hello"…'會繪製Say "Hello"…

註解符號:

單列註解:

//

在同一列內雙斜線之後的都視為註解

多列註解:

/* 表示註解開始

*/ 表示註解結束

不論幾列,只要居於開始與結束符號之間的都視為註解

draw_self():以呼叫instance的sprite預設值繪製sprite(不受draw_set相關function影響),當該instance沒有被指定sprite則會發生錯誤

draw_set_halign(Argument):設定繪製文字的水平對齊模式,靠左對齊(fa_left),置中對齊(fa_center),靠右對齊(fa_right)

draw_text_transformed(x,y,string,xscale,yscale,angle):以給定的x軸縮放、y軸縮放以及角度在給定的點繪製給定的文字

draw_set_colour(指定色彩):設定繪圖functions使用的顏色,白色參數為c_white

draw_set_blend_mode_ext:設定繪圖functions使用的blend mode


draw_sprite_ext(sprite,subimage,x,y,xscale,yscale,rot,colour,alpha):依給定的參數繪製sprite,rot是旋轉角度,colour是混色色彩,alpha是透明度,subimage以image_index或-1代入代表繪製obj當下展示的subimage


draw_sprite_part(sprite, subimg, left, top, width, height, x, y):繪製指定的sprite的指定image的指定部位在指定的座標(座標定義的是指定部位的左上角位置),需注意此function只對bitmap類別的sprite有用,部位指定方式如下圖:


draw_text_colour(x, y, string, c1, c2, c3, c4, alpha):指定方形四個角落的顏色以及透明度在指定的座標繪製漸層文字,需注意HTML5不支援漸層混色,但支援單色混色,但達成方式是創造一個存放在快取的文字複本,並在需要時取用的方式來達成,若是使用的顏色較多(不同的複本就多),可能會拖慢遊戲速度,可透過設定文字快取大小的方式來限制使用的快取量

font_set_cache_size(index,max):設定指定的文字的快取大小,index為指定文字,max為存放在快取的複本上限

sprite_set_cache_size(index,max):設定指定的sprite的快取大小,index為指定sprite(包含所有subimages),max為存放在快取的複本上限

point_distance(x1,y1,x2,y2):傳回兩點間的直線距離


instance_nearest(x,y,obj):指定1個座標與1個object,傳回該object距離指定座標最近的instance id,是以指定點與instance的origin點的直線距離做比較,若指定object無instance存在,則傳回關鍵字noone

instance_destroy():摧毀instance

point_direction(x座標1,y座標1,x座標2,y座標2):傳回兩點的順時角

motion_add(dir,speed):在既有當下的向量速度基礎上,增加給定的向量速度給呼叫的instance,例如原本朝90度方向以5的速度前進的instance,施加1次朝180度方向的速度5(motion_add(180,5)),instance就會變成朝135度方向以7.07(1:1:根號2,x和y都是5,斜邊就是7.07)的速度前進,若持續施加則朝180度的向量速度會愈來愈強,instance就會愈來愈往180度方向走且速度愈來愈快

physics_fixture_create():創造1個物理存在(fixture)

physics_fixture_set_circle_sharp(fix,rad):設定fixture的形狀為指定半徑大小的圓形

physics_fixture_set_density(fix,density):設定fixture的密度大小(單位:kg/m平方),遊戲中的質量是根據設定的密度與表面積自動計算,同樣的面積情況下,密度愈大者質量愈大,密度設為0等當於無限大,該fixture變成固定靜止狀態


physics_fixture_set_restitution(fix,restitution):設定"物理恢復係數",簡單講就是碰撞後物理力量的回復程度,值通常設定在0~1之間,可設定大於1的值,但可能產生無法預測的結果


physics_fixture_set_collision_group(fix,group):設定物理碰撞群組,group值可為正值,0,負值,分別代表不同的意義,預設值為0,代表忽略碰撞,但需注意同1個room內的群組數量和碰撞運算負荷成正比,儘量減少同room內的群組數量


physics_fixture_set_linear_dampiing(fix,damping):設定fixture的線性阻尼,阻尼愈大,動能降的愈快,阻尼值可從0~infinity,通常設定值在0~1之間


physics_fixture_set_angular_damping(fix,damping):設定fixture的角阻尼,阻尼愈大,旋轉速度降的愈快,角阻尼值可從0~infinity,通常設定值在0~1之間

physics_fixture_set_friction(fix,friction):設定摩擦力,兩個有綁定fixture的instance發生碰撞時,摩擦力是動能損失因素之一,愈大的摩擦力造成愈多的動能損失,摩擦力參數值必須介於0~1

physics_fixture_bind(fix,target):將fixture綁定到目標,目標可為instance id,object id,other,all,綁定的意思是將fixture的屬性轉換到目標身上,而非fixture本身,因此單一fixture可以綁定到複數目標,目標指定object index則其"現在"存在於room的instance將全部獲得此fixture的屬性(但不含該objcect後續創造的instance),甚至可以指定1個parent object為目標,使其所有children instance皆獲得此fixture的屬性

這個function也會傳回1個唯一的id給"已綁定的fixture"(不是fixture本身),並可透過physic_remove_fixture function從目標身上移除物理屬性,這樣可在不需消滅目標或重新創造目標的條件下移除目標身上的物理屬性

當需要此fixture屬性的目標皆已完成綁定,就不再需要此fixture,應使用physics_fixture_delete function將其刪除,以避免造成記憶體漏洞,導致遊戲速度變慢甚至是當掉。刪除fixture對已經綁定的目標屬性不會受影響,會繼續擁有設定的屬性

綁定時fixture的質量中心定位到目標的origin


當想將質量中心對應到指定的點時,可使用phsics_fixture_bind_ext

phsics_fixture_bind_ext(fix,target,xoffset,yoffset):以指定點的方式綁定fixture到目標


physics_remove_fixture(bound fixture id):指定已綁定fixture id並將之移除

physics_fixture_delete(fix):刪除fixture(從記憶體)

repeat(n):執行範圍內的程式碼n次,和for類似

repeat(10)

{

程式碼

}

tile_add(background,left,top,width,height,x,y,depth):從指定的background上設定範圍截取tile並以指定的depth佈置在指定的座標,會傳回id,運作邏輯類似draw_sprite_part

tile_layer_find(depth,x,y):傳回在指定depth的指定座標的tile id,若該位置無tile則傳回-1

collision_line(x1,y1,x2,y2,obj,prec,notme):確認指定的object的instnace是否有和給定的線段發生碰撞,若有則傳回instance id,若無則傳回noone,需注意若此object同時有多個instance都和線段發生碰撞,則只會傳回其中1個id,"prec"是精確碰撞檢查參數,true為精確檢查,速度較慢,false為大部檢查,速度較快,需注意若function的參數設定為精確檢查,則object的sprite的碰撞檢查頁面上的"Precise collision checking"也必須打勾才有作用,否則只會做大部檢查


collision_point(x,y,obj,prec,notme):同collision_line,差異如字面所示,一個是檢查給定的"點",一點是檢查給定的線是否與給定object的instance發生碰撞事件


instance_position(x,y,tar):檢查在給定座標是否會與給定目標有碰撞並傳回目標id,若沒有碰撞發生則傳回noone,若tar給定的是object,則會檢查此object的所有instance,tar亦可用all或other關鍵字,all會檢查所有instance,other會檢查自身以外的instance,若不需要知道目標id,則用position_meeting較適合

position_meeting(x,y,tar):同instance_position,但不會傳回id,只傳回是否會發生碰撞

sign(n):n值為正值傳回1,為負值傳回-1,為0傳回0

sign(100)傳回1,sign(-5)傳回-1,sign(0)傳回0

instance_find(obj,n):傳回給定object的第n個instance id,n是instance被create的順序,"obj"若以特殊關鍵字"all"代入,則n的定義變成是instance在此room被create的順序,順序從0開始,不在存則傳回"noone"

mouse_x:唯讀,傳回鼠標在"room"中的x座標

window_mouse_get_x:傳回鼠標在"window"中的x座標

view_xview[0~7]:傳回或設定指定的view的x座標

view_wview[0~7]:傳回或設定指定的view的寬度

instance變數(紅色):

place_meeting(x座標,y座標,對象object):確認若將自身物件移往指定座標是否會和對象instance發生collision事件,若會則傳回true,否則傳回false

direction:前進方向,單位"角度"

speed:前進速度,單位"pixel / 每step"

sprite_index:instance現有的sprite索引名稱,可指定新索引名稱給instance以更換sprite,更換sprite不會改變顯示的sub-image編號

image_index:傳回instance正在顯示的sub-image編號

image_number:傳回instance現在使用sprite的第幾個sub-image,當這個spriteo只有1個sub-image時,這個變數傳回1,但這個sub-image的image_index是0(類似陣例第1個位置是0的定義方式)

sprite_get_number:傳回instance現正使用的sprite有幾個sub-images

image_xscale:傳回或設定sprite的水平比例尺,設為-1變成水平鏡像



image_yscale:傳回或設定sprite的垂直比例尺,設為-1變成垂直鏡像



image_blend:以指定色彩和instance的sprite混和



xstart:傳回instance被create時的x座標

ystart:傳回instance被create時的y座標

phy_speed_x:傳回或設定instance的x方向向量速度,單位pixels per step

phy_linear_velocity_x:傳回或設定instance的x方向向量速率,單位pixels per second

vspeed:設定或傳回instance的垂直移動速度,正值為往畫面下方(+y)移動,負值為往畫面上方(-y)移動,單位pixels per step

gravity:取得或設定instance的gravity參數,gravity會產生1個持續的力量在gravity direction,會造成累進的影響,持續累進加快instance的速度

gravity_direction:取得或設定instance的重力方向,重力方向是重力施力的方向

其他:

已建立在resource tree中的物件,名稱出現在程式碼中時都會以有色字體表示,字體白色代表不是有效物件

程式碼中自定變數以白色字體顯示

沒有留言:

張貼留言