hallo,everyone,我又来了,第3篇内容主要讲述坦克大战开始菜单的设计和事件绑定。

惯例,先上HTML内容和最终效果

//菜单包裹层

//开始菜单,4个按钮div

开始游戏
游戏说明
选择关卡
定义地图

//游戏说明div

  • W:向上
  • S:向下
  • A:向左
  • D:向右
  • J:开炮/选择地图种类
  • Esc:返回主菜单/取消定义地图
  • Enter:完成定义地图
返回

//里面有一个返回按钮div

//选择关卡按钮,里面有4个按钮

关卡一
关卡二
关卡三
关卡四

.start{ width:250px; height:400px; background:#333; border:3px #9F0 outset; position:absolute; top:100px; left:300px; border-radius:10px;z-index:50;}

#shuoming,#chooselevel{left:560px; opacity:0; display:none;}

来看这一段样式,#shuoming和#chooselevel属于次级菜单,他们与一级菜单的区别在于,定位于一次菜单的右面,并且是隐藏的,只有点击事件出现后,次级菜单才会出现。

1 为“开始游戏”按钮绑定事件

//注意这里的这个选择器,更好的方式应该是$('#start .btn').eq(0),刚做的时候学艺不精;

$('#start').find('.btn').eq(0).bind('click',function(){//选中开始游戏按钮,绑定单击事件

$('#start').animate({top:0,opacity:0},500,function (){//给主菜单添加动画,500ms完成隐藏和移动

addposition();//还记得这个函数吗,这里的作用应该是格式化地图格子的位置

$(this).css('display','none');//主菜单动画完成后,将其display为none,因为如果只是单纯的透明度为0,实际上这个菜单里的按钮还是可以点击的。

setTimeout(slideupmubu,500);//延迟500ms开幕

setTimeout(startwar,500);//延迟500ms开始游戏,这里的startwar()是一个自定义函数,用来给坦克绑定事件,下节再给大家讲。

});

});

2 为“游戏说明”按钮绑定事件,游戏说明菜单“返回”按钮绑定事件

$('#start').find('.btn').eq(1).bind('click',function(){

$('#start').animate({left:50,opacity:0},500,function (){//主菜单动画,500ms内完成移动和隐藏

$(this).css('display','none');//动画完成后,将主菜单display:none;

$('#shuoming').css('display','block');//将二级菜单dispaly:block;

$('#shuoming').animate({left:300,opacity:1},500);//二级菜单动画,500ms内完成移动和显示;

});

});

$('#shuoming').find('.btn').bind('click',function(){//次级菜单游戏说明的返回按钮事件

$('#shuoming').animate({left:560,opacity:0},500,function (){

$(this).css('display','none');

$('#start').css('display','block');

$('#start').animate({left:300,opacity:1},500);

});

});

3 为“选择关卡”按钮绑定事件,选择关卡菜单“关卡X”按钮绑定事件

$('#start').find('.btn').eq(2).bind('click',function(){//这个事件也不解释了,实际上应该定义成一个通用函数的,方便直接调用。

$('#start').animate({left:50,opacity:0},500,function (){

$(this).css('display','none');

$('#chooselevel').css('display','block');

$('#chooselevel').animate({left:300,opacity:1},500);

});

});

$('#chooselevel').find('.btn').each(function(index, element) {//遍历4个关卡按钮

$(this).bind('click',function(){//为每个按钮添加点击事件;

pastemap(mapdata[index]);//布置对应关卡的地图,我事先制作了4个关卡的数据,储存在mapdata数组中;

$('#chooselevel').animate({left:560,opacity:0},500,function (){//布置完关卡后,直接返回一级菜单;

$(this).css('display','none');

$('#start').css('display','block');

$('#start').animate({left:300,opacity:1},500);

});

});

});

上节,我们已经为“定义地图”绑定过事件了,这里就不啰嗦了。

前文中,有几个函数,下面我们来定义一下

1. clearmap(),清除地图的各种地图块的class

function clearmap(){//清除地图上的所有东西,并布置老家

$('.map_i').each(function(index, element) {//遍历所有地图小块

$(this).attr('class','map_i')//初始化class为最初的map_i,这样原来的砖墙河流等就会没有了;

});

buzhilaojia();//为老家加上不可穿越的属性,还记得吗,给class里加一个zhuan_qiang关键字;

}

2. slidedownmubu()/slideupmubu(),开幕闭幕

function slideupmubu(){//开幕脚本

$('#mubu1').animate({height:0},2000,'linear');//上幕布向上卷起,匀速

$('#mubu2').animate({height:0,top:600},2000,'linear');///下幕布向下卷起,匀速

}

function slidedownmubu(){//幕布脚本

$('#mubu1').animate({height:300},2000,'linear');

$('#mubu2').animate({height:300,top:300},2000,'linear');

$('#start').css('display','block').delay(2100).animate({top:100,opacity:1},500);//闭幕完成后,还要将开始菜单显现;

}

3. copymapdata(),该函数可以获取定义好的地图格子的种类,返回数组

function copymapdata(){//获取自定义地图数据

var $mapdata=[];//初始化数组;

$('.map_i').each(function(index, element) {//遍历所有地图格子

$mapdata.push(getclass(index));//将每个地图格子的地图类型push入数组,这里的getclass(index)在前面已经讲过了,会根据不同的class返回不同的值。

});

return $mapdata;//返回数组

}

4. pastemap(data),传入一个储存地图数据的数组,根据数据布置地图

function pastemap(data){//将data数据布置成地图

clearmap();//格式化地图

for(var i=0;i

switch(data[i]){//根据不同的值,为每个地图格子添加不同的样式

case 1:$('.map_i').eq(i).addClass('zhuan_qiang');break;

case 2:$('.map_i').eq(i).addClass('tie_qiang');break;

case 3:$('.map_i').eq(i).addClass('riverqiang');break;

case 4:$('.map_i').eq(i).addClass('caodi');break;

}

}

}`

5. startwar(),真正的开始游戏脚本

function startwar(){//开始游戏脚本

$(document).unbind('keydown').unbind('keyup');//初始化键盘按键事件

clearTimeout(timer);//如果光标闪烁,停止编辑地图中的光标闪烁

$('#bianji').css('display','none'); //退出编辑模式,将光标隐藏

$('#yyf').attr('style','').css('display','block');//显示男主角坦克

$(document).bind('keydown',function(event){//绑定键盘按键事件

if(event.which==65)tankermove('#yyf',3);//A坦克向左移动

if(event.which==87) tankermove('#yyf',1);//W坦克向上移动

if(event.which==83) tankermove('#yyf',2);//S坦克向下移动

if(event.which==68) tankermove('#yyf',4);//D坦克向右移动

if(event.which==74) shot('#yyf');//J 男主角坦克开炮

if(event.which==27) {//ESC退出游戏

slidedownmubu();//闭幕

$(this).unbind('keydown').unbind('keyup');//初始化键盘按键事件

setTimeout(clearmap,2150);//格式化地图

setTimeout('pastemap(mapdata[0])',2150);//退出后,重新布置关卡1

}

});

$(document).bind('keyup',function(event){//绑定松开移动按键后,坦克立即停止移动的事件

if(event.which==65)$('#yyf').stop(true,false);

else if(event.which==87)$('#yyf').stop(true,false);

else if(event.which==83) $('#yyf').stop(true,false);

else if(event.which==68)$('#yyf').stop(true,false);

movet();//坦克停止移动后,做一个位置的小调整

});

}

到这里,开始菜单的各按钮事件绑定就完成了。本篇内容也到此结束。

其中,startwar()里有几个重头函数,将是以后的章节中要介绍的主要内容。

其中,tankermove(tankerid,n)是坦克的移动函数;

shot(tankerid)是坦克的开炮函数;

movet()是一个移动结束后位置的调整函数,可以让坦克停止移动后其位置是一个整数,不然位置是小数不利于坦克移动,比如你永远也穿不过一个宽度和坦克宽度一样的通道。

html做坦克大战的效果,HTML+CSS+JQ试做经典坦克大战(三)相关推荐

  1. html经典坦克大战,HTML+CSS+JQ试做经典坦克大战(二)

    承接一,本篇主要完善坦克大战的自定义地图编辑脚本. 开启编辑地图模式 $('#bianji').css('display','block'); 显示光标 var timer;//自定义地图光标闪烁定时 ...

  2. 只用html5与CSS做一个简单的页面,HTML+CSS基础训练之做一个简单页面的布局

    下面进入正题:布局是网页设计的基础中的基础,一个好的布局可以让人一目了然,一个失败的布局会让协同人员抓狂.所以前端开发,从布局开始. 首先分析一下图片的布局 ,分析各个色块之间的嵌套关系 如图所示:红 ...

  3. 飞机大战python介绍_用 Python 写一个经典飞机大战

    while running: # 设置游戏帧率为 60 clock.tick(60) if not is_pause and not is_game_over: if not player.is_hi ...

  4. python小游戏——怀念经典坦克大战代码

    ♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好,再疫情结束后如约而至. 目录 一.效 ...

  5. 用C#做图片轮播效果

    用C#做图片轮播效果 老帅    在C#中做图片轮播效果,不借助第三方控件,也是可以实现的.使用PictureBox作为图片展示容器就可以.但是图片列表放在什么地方,如何加载,需要考虑一下!    1 ...

  6. html做坦克大战的效果,HTML5实现坦克大战(一)

    方法:MoveUp:坦克上移 MoveDown:坦克下移 MoveRight:坦克右移 MoveLeft:坦克左移 MyTank extends Tank EnemeyTank extends Tan ...

  7. 100行JS代码实现❤坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript )

    坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript ) HTML5坦克大战网页小游戏,完美还原小霸王学习机效果,以坦克战斗及保卫基地为主题,属于策略型类游戏. ...

  8. 用python做一个坦克小游戏_Python制作经典坦克大战小游戏

    image.png 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. ...

  9. [css] 使用css3做一个魔方旋转的效果

    [css] 使用css3做一个魔方旋转的效果 总的来说,用了一些 3D 效果的样式,如 translate3d,rotate3d,perspective,transform-style: preser ...

最新文章

  1. oracle忘记口令
  2. 2016第三本《曾国藩的正面和侧面》
  3. 汇编语言随笔(9)-实验11(用条件转移指令来编写子程序)
  4. 受益终生的世界顶级八大思维
  5. 如何设计复用性较好的类?
  6. 史上最完整的文件和目录操作类
  7. php 常用编译参数,php编译参数,不用怕!!
  8. viewflipper_Android ViewFlipper示例教程
  9. 转的一个itoa实现(效率很高,并且能够正确处理INT_MIN)
  10. 在Android中使用自带API操作Json
  11. UEFI开发探索75- YIE001PCIe开发板(08 跑马灯实验)
  12. TeamViewer 13界面功能介绍
  13. word表格删除空白行java_在Word中怎样批量删除空行,这些点主要注意
  14. java循环结构sum关于质数,质数
  15. Keras深度学习实战(20)——DeepDream模型详解
  16. 标准的服务端返回Result封装及使用
  17. 关于python的各个常用软件——python、pycharm、anaconda
  18. 关于学习软件逆向分析意义的阐述
  19. 狂野飙车4java游戏音乐_狂野飙车8赛车背景音乐名称大全
  20. GitHub图片不能正常显示的解决办法

热门文章

  1. Vue插件库汇总,收藏学习!
  2. 百度站长平台使用教程:抓取异常
  3. 上海迪士尼将以一系列季节限定的特别惊喜继续庆祝5岁生日庆典
  4. Delaunay三角网
  5. SCAU软件工程基础复习笔记
  6. SCAU 8592 KMP算法
  7. Cesium实现场景截图
  8. 服务器SFTP登录密码过期修改,【linux】账号密码过期导致无法登录
  9. 学习C#和.NET的资源
  10. python档案管理系统代码_文件档案管理工具下载