简单的对话框体(上)
该教程由油管上的妹子FriendlyCosmonaut原创,能翻墙的尽量看原版吧:Textbox Tutorial。
代码托管在Github。实现的效果为:
以下是文本教程
设置游戏帧数
在option设置里设置游戏的运行帧数为60.
绘制需要的对话框背景
创建大小为W:400-H100的精灵,并使用绘图工具,将其涂成纯黑色
创建对话框体文本对象
在对象的draw事件进行对话框的绘制
创建一个房间room
并设置房间的大小参数和背景颜色
此时将对象拖动至房间任意一处就能看到效果了,但对话框的还需要继续优化。
添加触发事件,文本换行等等。
设置字体
GMS2里的字体可以在font里面创建,但是对于想要使用整个中文字库的用户,这里提供一种不同于博主的方法,从外部导入Included Files文件。
添加字体
在绘制文字之前,设置字体
使用draw_text_ext来处理文本换行
第4个参数为行间距,第5个为换行的宽度
然后在create处理化需要的参数
运行游戏可以看到换行的效果
添加触发事件,来创建对话框
创建玩家player对象来检测鼠标点击事件,在指定的Text层级中创建对话框
将player对象拖到房间中,运行游戏,点击鼠标左键,就能看到点击效果了
将触发事件更改为碰撞触发
先创建对象所需要的精灵
然后创建obj_susan对象,并依次为两个对象指定精灵,然后创建碰撞事件代码来创建对话框
注意place_meeting只用在非精确碰撞遮罩下才会返回true
运行游戏即可看到效果:player碰到susan会创建一个对话框
解决每帧创建实例的错误
这是一个很常见的错误,新手常常不加选择和判断在step和draw这类每帧都会被执行的事件创建实例,而旧的实例又没有被销毁,运行一段时间后,游戏就会奔溃。
先把创建的实例的索引赋值给变量myTextBox
然后在draw事件中,绘制实例的id
运行游戏就会看到实例在不断的增加,即不断的被创建。
所以在创建实例时,通过是先检测要创建的实例存在,如果存在就不需要再创建了
并且注意在销毁实例时,也需要检测实例是否存在,避免引用不存在的实例,引起游戏崩溃
值得注意的是,在销毁实例后,记得将引用的变量设为noone,否则myTextBox仍然为实例的索引号,下次检测到碰撞时,检测变量不为空,就不会创建对话框了。
使人物具有自己的对话文本
我们现在创建的文本就是在obj_TextBox的create事件中初始化好的,但实际上我们希望NPC是具有自己的对话文本的,表达自己的情绪和性格,而obj_TextBox只负责对话框的形式和表现,所以在创建对话框时,使用NPC的文本重新给对话框的文本进行赋值
这样一来,控制player与susan碰撞,对话框使用就是susan的对话文本“Hello I'm Susan”
关于更多的模块化对话,优化对话框体的表现,将在下节中继续。
代发好了 = =
问个问题,我看说明文档里有/n换行,可是我试了“111/n11”不好使啊,想手动换行该怎么做?
另外,我写的draw_text_ext(x,y,text,10,30)为什么换行没效果,该多长还是多长
是有用的哦,事实是你用错了转义字符,是右斜杠,你用的左斜杠,还有ext的换行是受scale和宽度影响,你确定是不是你的参数设置错误
话说我记得好像draw_text_ext()是强制单行显示的方法,不能用转义符换行,要手动换行的话要用draw_text()吧……
大佬,这个是必须打空格才能换行吗?没有自动换行(判断每行最大宽度)的说法吗?
忍不住要申请一发转载~介绍的是相当详细了