最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

UndertaleModTool介紹&使用 #4 (分析一個對話object)

2021-06-10 08:52 作者:真是滑稽了啊  | 我要投稿

????由前文我們已經(jīng)學(xué)習(xí)了gm和UTMT最最基本的一些內(nèi)容,接下來我們來結(jié)合一個ut內(nèi)的實例來分析它是如何運作的,并進行相關(guān)內(nèi)容的介紹

我們要分析的是這樣一個object,這是遺跡內(nèi)的一個仙人掌,可以與之進行對話

作為一個無比常見的對話object,它有幾個典型特征:

????1.Parent是obj_readablesolid,意味著它繼承了obj_readablesolid的很多功能

????2.從貼圖碰撞箱可以看出,它能與玩家碰撞的地方就是白色區(qū)域大小

????3.有三個事件:Create;Alarm;Step

介于我們現(xiàn)在毫無頭緒,不如從它的Create出發(fā)吧。其中image_xscale = 1;image_yscale = 1 這兩條的意思是,圖形橫坐標(biāo)方向拉伸程度為1,圖形縱坐標(biāo)方向拉伸程度為1,如果你修改image_xscale?= 5,它就會變得很胖

myinteract = 0
image_xscale = 1
image_yscale = 1

再來看它的Alarm事件

myinteract = 3
global.msc = 0
global.msg[0] = "* Ah^1, the cactus.&* Truly the most tsundere& ?of plants./%%"
if global.flag[7]
 ? ?global.msg[0] = "* It's not like this cactus& ?was waiting for you to come& ?back or anything.../%%"
global.typer = 5
global.facechoice = 0
global.faceemotion = 0
mydialoguer = instance_create(0, 0, obj_dialoguer)

這里有非常多信息,我們一點點來看,這個myinteract是限制obj_mainchara所用,等于3時意味著玩家不會移動,也就是對話時讓玩家不動。global.msc是對話索引數(shù). 不同的數(shù)對應(yīng)不同的文本,內(nèi)容定義自gml_Script_SCR_TEXT,可以看出等于0時就是直接按照alarm里寫的對話進行顯示,而不是從SCR_TEXT這個文本中心里讀取對話。

global.typer - 決定角色說話音效。5時為普通對話

global.facechoice - 決定文本框顯示的角色頭像,具體如下

1 - Toriel

2 - Flowey

3 - Sans

4 - Papyrus

5 - Undyne

6 - Alphys

7 - Asgore

8 - Mettaton

9 - Asriel

global.faceemotion - 決定角色是什么表情

其中有這么一行,意思是創(chuàng)建一個obj_dialoguer,并且把它的id賦給mydialoguer這個變量

mydialoguer = instance_create(0, 0, obj_dialoguer)

來看一下obj_dialoguer的draw事件,雖說看起來很復(fù)雜,但摘取其中這段,能看出它是用于繪制對話框的。之所以把它的id賦給mydialoguer,是為了便于把它進行消除,以結(jié)束對話

 ? ?if instance_exists(obj_face)
 ? ?{
 ? ? ? ?if (obj_face.y > (yy + 80))
 ? ? ? ? ? ?obj_face.y -= 155
 ? ?}
 ? ?draw_set_color(c_white)
 ? ?draw_rectangle((view_xview[view_current] + 16), (view_yview[view_current] + 5), (view_xview[view_current] + 304), (view_yview[view_current] + 80), 0)
 ? ?draw_set_color(c_black)
 ? ?draw_rectangle((view_xview[view_current] + 19), (view_yview[view_current] + 8), (view_xview[view_current] + 301), (view_yview[view_current] + 77), 0)

我們注意到它的create,創(chuàng)建了一個OBJ_WRITER,這個obj是用于繪制文本本身的

count = 0
side = 0
global.facechange = 1
xx = view_xview[view_current]
yy = view_yview[view_current]
if instance_exists(obj_mainchara)
{
 ? ?if (obj_mainchara.y > (yy + 130))
 ? ?{
 ? ? ? ?side = 0
 ? ? ? ?if (global.facechoice != 0)
 ? ? ? ?{
 ? ? ? ? ? ?writer = instance_create((xx + 68), (yy - 5), OBJ_WRITER)
 ? ? ? ? ? ?script_execute(scr_facechoice)
 ? ? ? ?}
 ? ? ? ?else
 ? ? ? ? ? ?writer = instance_create((xx + 10), (yy - 5), OBJ_WRITER)
 ? ?}
 ? ?else
 ? ?{
 ? ? ? ?side = 1
 ? ? ? ?if (global.facechoice != 0)
 ? ? ? ?{
 ? ? ? ? ? ?writer = instance_create((xx + 68), (yy + 150), OBJ_WRITER)
 ? ? ? ? ? ?script_execute(scr_facechoice)
 ? ? ? ?}
 ? ? ? ?else
 ? ? ? ? ? ?writer = instance_create((xx + 10), (yy + 150), OBJ_WRITER)
 ? ?}
}

分析完Alarm,我們再來看Step吧

scr_depth(0, 0, 0, 0, 0)
scr_depth

這是一個讓object能和其他object重疊適當(dāng)?shù)膕cript,就是該誰在前面誰在后面,看著更立體。這里的scr_depth是一個script,script的使用可以大大減少重復(fù)代碼的出現(xiàn),讓代碼更加靈活。一個script可以有輸入值和輸出值,像scr_depth這個其實沒有輸入值也沒有輸出值。

下面是一個二者都有的例子,一個計算絕對值的script,就叫scr_abs吧,代碼內(nèi)容是

if argument0<=0 return -argument0
else return argument0

argument0是指第一個輸入值,例如scr_abs(-1)結(jié)果就是1。return的意思是結(jié)束代碼段,并且返回一個值,這個值也可以是一個字符串。例如在某obj的create里寫上,會彈窗顯示3

var i;
i=scr_abs(-3)
show_message(i)

分析完這個對話object,我們獲得了其大部分信息,但其Parent仍然有值得注意的點,這里一并分析

gml_Object_obj_readablesolid_Step_0中,我們看到了沒有對話框obj時,玩家又會被恢復(fù)能運動的狀態(tài),并且對話的觸發(fā)機制(使alarm[0] = 1)

if (myinteract == 1)
{
 ? ?global.interact = 1
 ? ?alarm[0] = 1
 ? ?myinteract = 2
}
if (myinteract == 3)
{
 ? ?if (instance_exists(mydialoguer) == 0)
 ? ?{
 ? ? ? ?global.interact = 0
 ? ? ? ?myinteract = 0
 ? ?}
}


UndertaleModTool介紹&使用 #4 (分析一個對話object)的評論 (共 條)

分享到微博請遵守國家法律
越西县| 澄迈县| 吉水县| 绥德县| 白银市| 棋牌| 连云港市| 东丰县| 巴里| 唐河县| 西平县| 渑池县| 连城县| 龙江县| 棋牌| 南京市| 安化县| 繁昌县| 寻甸| 东源县| 常熟市| 图木舒克市| 黄龙县| 武宣县| 金华市| 当雄县| 红河县| 厦门市| 同心县| 三明市| 泗水县| 财经| 鲁山县| 集贤县| 荣昌县| 娱乐| 宁国市| 施秉县| 大兴区| 城市| 鄂托克前旗|