javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字


Posted in Javascript onJanuary 23, 2013

前两讲我告诉了大家如何使人物移动,那么今天我们就来看看如何实现仿《三国志曹操传》人物情景对话。具体的链接我写在下方。

一、前言

相信大家都还记得吧,在某些新闻里会有一些惨不忍睹的结果是用像打字机一样的方式把文字弄出来。那么今天的主要目的就是要办到这个。

就在9月5日的时候,我在办公室里起了个做这种程序的念头,并且有了点思路。我首先想用调margin的方法,按理说是作出来了,但很不让人满意,毕竟很麻烦,并且技术也差。所以我打算用上数组和循环。9月13日我抽空写出来了,但由于这几天很忙,基本上在工作日不可能来照顾我的博客,因此没来得及分享给大家,现在是周末,所以就来给大家交流经验,希望我们共同进步。

二、代码讲解

首先还是来看段代码:

var contentout = []; 
var content = "ducle, ducle, ducle, ducle..."; 
contentout = content.substring(0, content.length); 
var sub = 0; var time = 0; 
function input(){ 
for(var i = 0; i < contentout.length; i++){ 
setTimeout("document.getElementById('ID_P_CONTENT').innerHTML+= contentout[sub], sub += 1", time); 
time += 100; 
} 
}

我就用了这点代码作出了意想不到的结果。哈哈,虽然形容有点夸张,但真的使我如愿以偿。话不多说,接下来看看解析。

这些代码完成的是打字,并且只用了数组和循环以及几个一般的变量。可见难度不算太大。

var contentout = []; 
var content = "ducle, ducle, ducle, ducle..."; 
contentout = content.substring(0, content.length); 
var sub = 0; var time = 0;

这里我进行了定义全局变量。首先是定义了数组,毕竟数组和循环是这个程序的核心。接着我定义了字符号串,并将内容设定为:“ducle, ducle, ducle, ducle...” 接下来就是要让字符一个一个跑到数组里了。因此我用到了函数substring(),这个函数就是专门把字符串切开成一个一个的字符的。

substring语法:stringObject.substring(start,stop)
另外也可以去w3cschool上看看:https://3water.com/w3school/js/jsref_substring.htm
当我们把字符串一个个切开后,我们就要把切开后的赋值给数组,这时数组就能正确地把每个字当作成员挨个放进下标。接下来我要做的任何人都能猜到了吧——那就是用循环把数组里的表示出来。

至于剩下的变量sub是用来以后输出数组元素的下标变量。time则是以后用循环打字的时间。具体分析下面会讲到。
再看代码:

function input(){ 
for(var i = 0; i < contentout.length; i++){ 
setTimeout("document.getElementById('ID_P_CONTENT').innerHTML+= contentout[sub], sub += 1", time); 
time += 100; 
} 
}

这里就是专门用循环挨个输出数组里的元素的核心部分。大家都知道javascript循环最烦人的——就是变量是先循环完。意思就是如果说:你把这里的变量i 每次循环时用alert打出来,那无论什么时候都是一个值,且都等于最大值。因此在上面我定义的sub变量就起了作用。

因为sub变量是等待后才做处理,所以不管循环多少次,它必须等到一定时间才+=1。那么就用它来做输出时的下标,是再也适当不过了。

setTimeout函数大家也明白:如果有两个setTimeout时间参数是一样的,那么就会在同一时间里执行这两个代码,即使你的代码不是写在同一行。因此我们给他每循环一次就加100,那么文字就会等待100毫秒后多出现一个。

另外还要注意一下,在这里给对象改内容要用+=,否则就会每次只显示一个字。

代码下载地址
三、演示效果

首先是:

javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字

然后是:

javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字

最后是:

javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字

演示地址:
四、后记

功夫不负有心人,我想游戏的设计并不难,只要用心,努力去做就能成功。以后如果有什么好的技术,我会立刻分享给大家。最近把以前讲过的技术整理了一下,做了个小demo,希望大家喜欢。demo的下载和试玩会在不久后公布,现在还在测试中。另外游戏开发和游戏引擎至关重要,我准备亲自开发自己的引擎,这样更容易设计游戏。
谢谢大家支持!

Javascript 相关文章推荐
JavaScript中的私有成员
Sep 18 Javascript
[原创]静态页面也可以实现预览 列表不同的显示方式
Oct 14 Javascript
2007/12/23更新创意无限,简单实用(javascript log)
Dec 24 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
Dec 02 Javascript
jquery实现商品拖动选择效果代码(自写)
May 28 Javascript
jquery获取复选框checkbox的值的简单实现方法
May 26 Javascript
Node.js的Koa框架上手及MySQL操作指南
Jun 13 Javascript
Webpack如何引入bootstrap的方法
Jun 17 Javascript
如何为你的JS项目添加智能提示与类型检查详解
Mar 12 Javascript
JavaScript实现Excel表格效果
Feb 07 Javascript
js实现移动端图片滑块验证功能
Sep 29 Javascript
如何利用vue实现波谱拟合详解
Nov 05 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
Jan 23 #Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 #Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
Jan 23 #Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
Jan 23 #Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
Jan 23 #Javascript
jquery简单瀑布流实现原理及ie8下测试代码
Jan 23 #Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 #Javascript
You might like
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
PHP排序算法类实例
2015/06/17 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
jquery之Document元素选择器篇
2008/08/14 Javascript
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
python贪吃蛇游戏代码
2020/04/18 Python
Python中dict和set的用法讲解
2019/03/28 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
Django的CVB实例详解
2020/02/10 Python
大专计算机个人求职的自我评价
2013/10/21 职场文书
中专毕业生自我鉴定范文
2013/11/09 职场文书
挂职自我鉴定
2014/02/26 职场文书
八项规定整改方案
2014/10/01 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang