Gamemaker studio2经验(4)——打字机效果
问题概述
在很多游戏中……算了实在不好意思写引言了,就直说啦。如果你是UT粉,想用gm搞搞UT的同人作品但是又无从下手,那么请看过来。
对于RPG类游戏,文字交流系统是不可或缺的,但是gm的文字系统……实在有些一言难尽,那没办法,谁让gm是真爱呢,既然发现问题那就卯足全力去解决它。
解决方案
首先我们来看一看什么是打字机。
熟悉吧!其实就是传统的文本对话框,它需要有:一个文本框,规整的文本格式,自动换行功能,逐字输出效果,按快捷键迅速显示完成功能。这就是一个打字机效果需要实现的所有内容。
现在我们分条来解决:
1、文本框
美工的事就不多讲了,因为我也是个究极美术渣T^T 不过网上关于文本框的UI还是蛮多的,随便下一个就好了。(图中的对话框是直接在gm里画的)
2、文本
由于文本是一个整体,因此我们可以新建一个对象:obj_word。代码如下:
obj_word—create
n=0; //是否说过话了,视作布尔值
allstrings=""; //字符串整体
strings=""; //已经输出的字符串
timer=0; //计时器1,用于控制字符输出的时间间隔
timer2=10; //计时器2,为了防止连按Z导致的bug,下文会讲
i=1; //当前字符下标
m=0; //是否已经结束显示文本了,视作布尔值
这些变量已经用注释解释了,重点放在step中
obj_word—step
if(n==0)
{//if(duixiang==1)
{//sound_play(snd_spicall);switch(talk){case 1:allstrings="Purple soul will be more charming.Isn't it?";break;case 2:allstrings="Honey, I can't see you like violence so much.";break;case 3:allstrings="Oh dear, are you ready for this spider feast?";break;case 4:allstrings="It's funny how you struggle.";break;case 5:allstrings="It's like bribing me. Don't be silly.";break;case 7:allstrings="You want to pity me? It's interesting. It looks like I have to do my best.";break;}
}
n=1;
}
timer+=1;
timer2-=1;
if(timer mod 10&&string_length(strings)<string_length(allstrings)&&m==0)
{strings=string_copy(allstrings,0,i);i+=1;
}
if(m==1) strings=allstrings;
if(keyboard_check_released(ord('Z'))&&m==0&&timer2<0)m=1;
if(keyboard_check_pressed(ord('Z'))&&string_length(strings)=string_length(allstrings))
{/*zhuren.close=1;global.began+=1;*/instance_destroy();
}
首先开头判断n=0?是用来检测这段对话是否显示过了,避免出现一句话无限重复的情况。下面的talk存储了要说的话。
随后我们开始更新计时器。计时器timer1一直++,每10帧显示一个字符。计时器timer2初始值为10,每帧减1,表示着在本对象在创建的时候你连按Z是没有用的,只有timer2被减到0了你才能继续按Z。这样避免了你按Z跳过上一段对话的同时由于连按效应导致下一段对话也被跳过。
下面介绍一个字符串复制函数:
string_copy(str,begin,end)
表示对str字符串从下标为begin到下标为end进行复制。由于每10帧i会加一,我们复制的长度也会每10帧增加一个长度,那么就可以显示出“打字”的效果了。
最后一步是Z键快进,我们需要关注m这个布尔值。当我们按下Z的时候,m从0转向1,表示着字符串应该从增长阶段进入完结阶段,那么根据
if(m==1) strings=allstrings;
这段代码,我们就可以瞬间完成整段字符串的复制。
最后,假如字符串的复制工作已经完成,如果再按Z,就结束这段对话。具体是关闭对话框还是进入下一段对话则由设计者来决定。
obj_word—draw
draw_set_font(font3);
draw_text_ext(x+50,y-35,strings,-1,275);
最后就是绘制阶段了,需要介绍一些这个函数:
draw_text_ext(x,y,str,sep,w);
其中x和y用来描述绘制起点的坐标,str是要绘制的字符串,sep表示行间距,w表示每一行能容忍的字符长度。一旦超出这个长度,那么文本就会自动换行。
到此打字机效果就制作完成了。其实过程相当简洁,只是用到了一些特殊的函数,当然如果你是UT党的话可以关注一下后续的文章,一口气看下来就可以上手同人游戏的制作辣!
Gamemaker studio2经验(4)——打字机效果相关推荐
- Gamemaker studio2经验(3)——昼夜更替效果实现
问题概述 在一些知名引擎(如unity,godot,cocos等)中,天空盒概念的引入使得场景中的天空丰富多彩,但是gm就吃了这个大亏.由于动态天空制作麻烦.没有对口的天空盒系统,导致很少有开发者在g ...
- Gamemaker studio2经验(2)——TCP联机
问题概述 众所周知gamemaker是一款制作2d游戏的优秀引擎,但是落后的弱联网机制始终是一个坑.所幸在gms2中,yoyogames集团加入了TCP的联机机制,这也为gm系列引擎制作联网游戏带来了 ...
- Gamemaker studio2经验(1)——右键人物移动逻辑
问题概述 红警.帝国时代.星际争霸--想必很多玩家都对这类即时战略游戏保有极深的感情.其中有一个较为常见的逻辑便是--左键划动选中人物,然后右键标记目标地点,使得人物向目标地点移动.这个逻辑最常见的问 ...
- jq挑战30天——打字机效果+小程序
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- cdn加载插件和npm安装的差别_web开发:打字机效果插件Typed.js
本文同步发表在我的个人博客中: 沧沧凉凉www.cclliang.com 打字机效果是非常酷的文字显示效果,视觉表现极佳,而通过Typed.js可以很简单的在web开发中实现打字机效果. 1. 官网 ...
- 如何实现文字逐个出现的打字机效果
嗨!大家好,我是小蚂蚁. 今天分享一下如何在微信小游戏制作工具中实现文字逐个出现的打字机效果,这个小功能可以用于游戏中的文字对白的展示,如果你要做的是一个文字类游戏的话,那么肯定用的上. 最终的效果如 ...
- html5 打字机效果,使用JavaScript制作打字机文本效果
我们在看电影时经常能够看到一些炫酷的打字机效果,用于显示一些地名或剧情简介.我们在网页中也能够实现类似的效果,目前网上已经有很多打字机效果的插件,如轻量级响应式jQuery打字机特效插件和逼真的js打 ...
- java图形打字机_Android模仿打字机效果的自定义View实现
前言 在做splash界面的时候,需要做类似于打字机打字的效果,字一个一个地蹦出来,显示每一个字都带有打字的声音. 效果演示 本例自定义View的演示效果如下(PS:一直不知道在Android上怎么录 ...
- AEJoy —— 表达式之闪烁光标的打字机效果(二)【JS】
效果图 打字机效果之红色闪烁的鼠标光标 一旦您知道在哪里添加表达式,为键入动画的光标添加颜色实际上是很容易的. 演示的打字机动画与闪烁的彩色光标下面 下面我创建了 4 种方法来学习这个 After E ...
最新文章
- 转	The connection to adb is down, and a severe error
- LINUX系统管理----GRUB笔记
- java中的局部变量、成员变量、类变量
- android 模糊读取文件名_Android 从路径中获取文件名 | 学步园
- Java文档阅读笔记-Spring Boot JDBC
- Oracle 20c 新特性:Online SecureFiles Defragmentation 在线的 LOB 碎片整理
- 10个最受欢迎的 JavaScript 框架,它们的主要特征和功能
- 理解Android编译命令
- 03ospf虚链路(Virtual Link)及冗余
- 计算机统计字符数,怎么看word版本-Word文档中的字数和字符数是怎样统计的?
- 射频信号处理知识点点滴滴
- EDM邮件营销的七个基本原则
- 58沈剑解读:数据库典型架构实践
- android中edittext属性
- PHP表白墙(前台+后台+mysql)源码下载
- Go 离线安装依赖包
- dubbo/dubbox(一)源码编译
- 分时系统用户可以独占计算机资源,资源共享分时系统
- 卷积网络中的通道(channel)和特征图(feature map)
- 稻盛和夫的人生法则,所谓人生赢家,不过是拥有“利他心”