玩玩webgame开发(2):人物移动与战争迷雾实现

玩玩webgame开发(2):人物移动与战争迷雾实现惯例,先上下效果图片:[img]/upload/attachment/47613/3b8e0d31-b9cc-3272-abbb-0941300a68ef.png[/img]在上一篇玩玩webgame开发(1)大概给出了jquery方式的地图实现,最近又做了一些改进,加进了更多元素。代码全部改成jquery插件的方式。有机会做专门的介绍。这次的主题主要是地图上面人物的移动以及战…

大家好,又见面了,我是你们的朋友全栈君。惯例,先上下效果图片:

[img]/upload/attachment/47613/3b8e0d31-b9cc-3272-abbb-0941300a68ef.png[/img]

在上一篇玩玩webgame开发(1)大概给出了jquery方式的地图实现,最近又做了一些改进,加进了更多元素。代码全部改成jquery插件的方式。有机会做专门的介绍。

这次的主题主要是地图上面人物的移动以及战争迷雾的实现。

人物的移动其实比较简单,就是监听键盘上下左右按键事件。

	
$(document).keydown(function(event){
$.boboMove(event);
});

后台boboMove函数的写法:


switch(event.keyCode){
case 37:
if(bobo.pos.X > minX){ //判断地图边缘
bobo.pos.X -= 1; //坐标变化
$("#"+"X"+bobo.pos.X+"Y"+bobo.pos.Y).append(boboFace);//将人物移动到这个位置上,实际做法就是将人物的图片放在这个div上面
}
break;
case 38:
if(bobo.pos.Y < maxY){
bobo.pos.Y += 1;
$("#"+"X"+bobo.pos.X+"Y"+bobo.pos.Y).append(boboFace);
}
break;
case 39:
if(bobo.pos.X < maxX){
bobo.pos.X += 1;
$("#"+"X"+bobo.pos.X+"Y"+bobo.pos.Y).append(boboFace);
}
break;
case 40:
if(bobo.pos.Y > minY){
bobo.pos.Y -= 1;
$("#"+"X"+bobo.pos.X+"Y"+bobo.pos.Y).append(boboFace);
}
break;
}
cleanBattleFog(); //清除战争迷雾

我写的这个webgame打算做个战争迷雾的效果,玩过魔兽争霸或者英雄无敌的人应该对这个概念很清楚,就是在没有探索之前,地图上面的区域都是迷雾覆盖无法看到的。

迷雾覆盖效果实现其实很简单,对于我所做的系统来说,迷雾就是所有的区域div都加上一个battleFog的css。

移除战争迷雾的算法是这样的:在人物的视野内的格子div移除battleFog这个css类。例如人物视野为1,人物坐标3,3。那么视野内的(2,3),(3,3),(3,4),(4,3),(3,2)。显示出来就是一个十字形,如果视野是2,那么显示出来就类似一个星形。

在正式给出代码之前,各位看客可以自己考虑一下这个算法的实现。可能大家都觉得这个很简单。。但是今天在写这个的时候才发觉这个看似简单的问题要写好不那么好想, :oops: :oops: 可能很久没动脑筋了吧,这里卖个小关子,大家动动脑筋想想,给出人物当前的坐标,以及人物的视野,得出当前人物所有可以看到的坐标。

=================思考十分钟分割线=================

:D

:D

:D

:D

:D

呵呵,最后给出我的战争迷雾移除算法:


function cleanBattleFog(){
var fogToBeClean = []; //将被移除迷雾的区域数组,保存所有将被移除迷雾的div的id
//bobo.pos.X 人物X坐标,
//bobo.pos.Y 人物Y坐标
//bobo.eyeshot 人物视野
for(var m =bobo.pos.X-bobo.eyeshot;m<=bobo.pos.X+bobo.eyeshot; m++ ){
for(var n=bobo.pos.Y-bobo.eyeshot;n<=bobo.pos.Y+bobo.eyeshot;n++){
var xdiff = m - bobo.pos.X;
var ydiff = n - bobo.pos.Y;
if(xdiff*xdiff + ydiff*ydiff <= bobo.eyeshot*bobo.eyeshot
&& m>=1 && n>=1 && m <= map.maxY && n <= map.maxX
){
fogToBeClean.push('#X'+m+'Y'+n);
}
}
}
$(fogToBeClean.join(',')).removeClass('battleFog');
}

其实算法不难,就是2点间坐标距离要小于视野。并且要注意考虑地图的边界,不然可能得到不在地图内的坐标。

每得到一个坐标,用数组的push方法保存到数组中。jquery支持用逗号分割的表达式获得多个对象,所以最后直接一个join搞定。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141825.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java jasypt_jasypt命令行工具的使用说明

    java jasypt_jasypt命令行工具的使用说明jasypt能够以很简单的方式为Java项目提供加密功能,这种简单的方式体现着它的命令行工具,与Spring,Hibernate,Springsecurity,wicket等第三方框架的集成。本文参加jasypt官方网站:http://www.jasypt.org/下载jasypt包,解压缩到本地目录。如下图:根目录:命令行工具目录:说明:在lib目录下是jasypt的核心jar和与第三方组件…

  • sublime如何实现函数折叠

    sublime如何实现函数折叠

  • 设计手机APP界面的感想

    设计手机APP界面的感想设计手机APP界面的感想设计三个界面,花费了大概七八个小时。看老师讲解的时候,感觉就是那么回事,挺简单的,其实不然,当亲自操作后发现了诸多问题。首先是对已知工具运用上的不熟练,有些昨天刚刚使用过的工具,在今天的设计中就发生了一些错误,导致返工修改的时候浪费了好多时间。还有就是不能很好地将几个软件的功能结合起来,不如最近学了PS和UI,在今天的设计中主要使用的是UI,在设计过程中发现界面的一些板

  • mfc wpf winform(工业用mfc还是qt)

    编程语言的组成编程语言做为一种语言自然和英语这些自然语言有类似的地方.学英语时我们知道要先记26个字母,然后单词及其发音,接下来就是词组,句子.反正简单的说就是记单词,熟悉词法,句法.接下来就是应用了,听说读写.而使用相同语言的人大脑里都有个翻译器,可以把自己的想法翻译成语言然后用说或写表达出来,而听和读则把接收来的语言翻译成自己大脑能理解的思想.那编程语言首先也是像英语一样会制定一些单词…

  • 学习笔记:04_Git的增、删、改和查看日志

    学习笔记:04_Git的增、删、改和查看日志

  • Linux Vim编辑器的基本使用

    Linux Vim编辑器的基本使用vi、vim编辑器:如何安装vim编辑器?vim编辑器的四种模式及其关系是什么?vim编辑器如何使用?vim如何进行复制、粘贴、剪切、恢复、撤销、删除等操作?vim四种模式如何切换?vim怎么添加多行注释?代码着色、异常退出如何解决、vim各模式的作用是什么…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号