javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现


Posted in Javascript onJanuary 23, 2013

上一讲我们谈到了如何让静态人物变为动态,今天我们来谈谈如何使人物移动,因为这一讲涉及上一讲内容所以我把上一讲的链接写在下方:

一、图片准备

今天我准备换几张图片,这样更新鲜些。

javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
这些素材照样来自《三国志曹操传》,如果我没记错,应该是曹操的素材。接下来我要结合上一次的技术,来告诉大家如何使人物走动起来。不过今天我们着重在于如何使人物走动,因为我们上一讲已经讲了如何使人物化静态为动态。

二、代码讲解

先看总的javascript代码:
var moveLengthLeft = 0; 
var moveLengthTop = 0; var actionST = 0; 
var timeInterval = 150; 
var pic = 0; 
function action() 
{ 
var pic1 = "./pic2.png"; 
var pic2 = "./pic3.png"; 
var pic3 = "./pic1.png"; 
var actionArray = [pic1, pic2, pic3]; 
var doc = document.getElementById("ID_IMG_CAOCAO"); 
if (pic == actionArray.length - 2){ 
pic = 0; 
}else{ 
pic += 1; 
} 
if(pic > 2){ 
pic = 2; 
doc.src = "./pic1.png" 
} 
doc.src = actionArray[pic]; 
} 
function walk() 
{ 
setInterval(action, timeInterval); 
for(var i = 0; i < 100; i++){ 
$("#ID_IMG_CAOCAO").animate({marginLeft: moveLengthLeft}, 10, function(){ //用jquery中的animate来控制人物行走 
actionST ++; 
if(actionST == 100){ 
standCaocao(); 
} 
}); //在动画做完时调用callback。callback里可以放函数。 
$("#ID_IMG_CAOCAO").animate({marginTop: moveLengthTop}, 10); 
moveLengthLeft += 2; 
moveLengthTop += 1; 
} 
} 
function standCaocao() 
{ 
pic = 2; 
}

局部分析如下:
function action() 
{ 
var pic1 = "./pic2.png"; 
var pic2 = "./pic3.png"; 
var pic3 = "./pic1.png"; 
var actionArray = [pic1, pic2, pic3]; var doc = document.getElementById("ID_IMG_CAOCAO"); 
if (pic == actionArray.length - 2){ 
pic = 0; 
}else{ 
pic += 1; 
} 
if(pic > 2){ 
pic = 2; 
doc.src = "./pic1.png" 
} 
doc.src = actionArray[pic]; 
}

以上代码我已经在上一讲提到过了,所以今天就不再过问了,直接讲如何移动人物。

首先来说,使物体移动无疑要想到jquery,不错今天我们是要用到它的一个函数:animate。
再看代码:

function walk() 
{ 
setInterval(action, timeInterval); for(var i = 0; i < 100; i++){ 
$("#ID_IMG_CAOCAO").animate({marginLeft: moveLengthLeft}, 10, function(){ //用jquery中的animate来控制人物行走 
actionST ++; 
if(actionST == 100){ 
standCaocao(); 
} 
}); //在动画做完时调用callback。callback里可以放函数。 
$("#ID_IMG_CAOCAO").animate({marginTop: moveLengthTop}, 10); 
moveLengthLeft += 2; 
moveLengthTop += 1; 
} 
}

这些代码能实现人物走动和停住主要在于callback和animate。callback主要是使人物停下,animate主要是使人物移动。

通常,animate的语法是:animate({css代码的改变}, 完成要用的时间, callback);。详情请看:https://3water.com/w3school/jquery/jquery_effects.htm,这里面还有很多其他jquery函数,可以多了解了解。

当然,animate显而易见,但callback呢???原来它藏在了animate里面。

function(){ //用jquery中的animate来控制人物行走 
actionST ++; if(actionST == 100){ 
standCaocao(); 
} 
}); //在动画做完时调用callback。callback里可以放函数。

这段代码便是callback。只不过我们把他的位置放上了函数,所以不怎么让人看得见。
callback的一些教程: https://3water.com/w3school/jquery/jquery_callback.htm

另外还有一串代码:

function standCaocao() 
{ 
pic = 2; 
}

这段代码主要是用来使动态人物变为静态人物。这样移动停止后,人物动作也没了。

源代码下载:(包括一个jquery-1.8.0.js文件)

三、演示效果

首先是:

javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现

然后是:

javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现

最后是:

javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现

演示位置

四、后记

首先人物行走和动作是游戏制作必不可少的环节,选择良好的算法和函数是成功的关键。
下一次我们将研究如何用js仿《三国志曹操传》人物情节对话。敬请期待!

希望大家多支持,谢谢。我会以更好的文章来回报大家。

Javascript 相关文章推荐
记录几个javascript有关的小细节
Apr 02 Javascript
javascript中onmouse事件在div中失效问题的解决方法
Jan 09 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
Nov 19 Javascript
JS判断客户端是手机还是PC的2个代码
Apr 12 Javascript
一行命令搞定node.js 版本升级
Jul 20 Javascript
了不起的node.js读书笔记之mongodb数据库交互
Dec 22 Javascript
JavaScript中的console.dir()函数介绍
Dec 29 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
Jul 20 Javascript
如何编写jquery插件
Mar 29 jQuery
JS实现下拉菜单列表与登录注册弹窗效果
Aug 10 Javascript
动态Axios的配置步骤详解
Jan 12 Javascript
Node.js 使用axios读写influxDB的方法示例
Oct 26 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
解决jquery submit()提交表单提示:f[s] is not a function
Jan 23 #Javascript
You might like
我的论坛源代码(七)
2006/10/09 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
php curl模拟post请求小实例
2013/11/13 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
Python自定义简单图轴简单实例
2018/01/08 Python
Python实现二维数组输出为图片
2018/04/03 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
python如何建立全零数组
2020/07/19 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
HTML5中的新元素介绍
2008/10/17 HTML / CSS
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
培训主管的岗位职责
2013/11/23 职场文书
供用电专业求职信
2014/07/07 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
2015年教师节主持词
2015/07/03 职场文书
研讨会致辞
2015/07/31 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle