GameMakerStudio2简单的对话框体教程(上)

分类栏目:gamemaker教程

715

该教程由油管上的妹子FriendlyCosmonaut原创,能翻墙的尽量看原版吧:Textbox Tutorial。

代码托管在Github。实现的效果为:

Image title

以下是文本教程

设置游戏帧数

在option设置里设置游戏的运行帧数为60.

绘制需要的对话框背景

创建大小为W:400-H100的精灵,并使用绘图工具,将其涂成纯黑色

Image title

创建对话框体文本对象

在对象的draw事件进行对话框的绘制

Image title

创建一个房间room

并设置房间的大小参数和背景颜色

Image title

此时将对象拖动至房间任意一处就能看到效果了,但对话框的还需要继续优化。

添加触发事件,文本换行等等。

设置字体

GMS2里的字体可以在font里面创建,但是对于想要使用整个中文字库的用户,这里提供一种不同于博主的方法,从外部导入Included Files文件。

Image title

添加字体

Image title

在绘制文字之前,设置字体

Image title

使用draw_text_ext来处理文本换行

第4个参数为行间距,第5个为换行的宽度

Image title

然后在create处理化需要的参数

Image title

运行游戏可以看到换行的效果

 

添加触发事件,来创建对话框

创建玩家player对象来检测鼠标点击事件,在指定的Text层级中创建对话框

将player对象拖到房间中,运行游戏,点击鼠标左键,就能看到点击效果了

将触发事件更改为碰撞触发

先创建对象所需要的精灵

Image title

然后创建obj_susan对象,并依次为两个对象指定精灵,然后创建碰撞事件代码来创建对话框

注意place_meeting只用在非精确碰撞遮罩下才会返回true

Image title

Image title

运行游戏即可看到效果:player碰到susan会创建一个对话框

Image title

解决每帧创建实例的错误

这是一个很常见的错误,新手常常不加选择和判断在step和draw这类每帧都会被执行的事件创建实例,而旧的实例又没有被销毁,运行一段时间后,游戏就会奔溃。

先把创建的实例的索引赋值给变量myTextBox

Image title

然后在draw事件中,绘制实例的id

Image title

运行游戏就会看到实例在不断的增加,即不断的被创建。

Image title

所以在创建实例时,通过是先检测要创建的实例存在,如果存在就不需要再创建了

并且注意在销毁实例时,也需要检测实例是否存在,避免引用不存在的实例,引起游戏崩溃

Image title

值得注意的是,在销毁实例后,记得将引用的变量设为noone,否则myTextBox仍然为实例的索引号,下次检测到碰撞时,检测变量不为空,就不会创建对话框了。

Image title

使人物具有自己的对话文本

我们现在创建的文本就是在obj_TextBox的create事件中初始化好的,但实际上我们希望NPC是具有自己的对话文本的,表达自己的情绪和性格,而obj_TextBox只负责对话框的形式和表现,所以在创建对话框时,使用NPC的文本重新给对话框的文本进行赋值

Image title

这样一来,控制player与susan碰撞,对话框使用就是susan的对话文本“Hello I'm Susan”

Image title

关于更多的模块化对话,优化对话框体的表现,将在下节中继续。

GameMakerStudio2简单的对话框体教程(下)