vue3飞机大战,

  vue3飞机大战,

  本文主要详细介绍了Vue实现的飞机作战游戏。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

  

目录

  用Vue开发一个简短版的飞机战争游戏一、实现思路二。必学知识点三。实施步骤

  

使用 Vue 开发一个简略版的飞机大战小游戏

  例如,假设你决定尝试开发一个飞机对飞机的小游戏,以便向更多访问你博客的人展示你的技能。

  功能:游戏开始前需要用户名。玩家可以发射子弹。敌人和行星随机出现。鼠标可以控制玩家移动。敌人可以发射子弹。

  

一、实现思路

  如题所述:

  玩家可以控制玩家的飞机发射子弹,敌人和行星随机生成;

  这意味着我们需要一个单人玩家平面dom,以及vue循环为敌人、星球和子弹生成的三个DOM。

  用敌方行星生成的dom的位置由数据中的x和y值决定。

  按空格键时产生的子弹是由当时按空格键时飞机的位置决定的。

  敌人随机发射的子弹是由当时发射子弹的敌人的位置决定的。

  游戏开始时需要用户名,所以我们只需要在Vue实例中为输入绑定一个数据,然后为开始游戏按钮绑定click事件。然后,如果计算的用户名长度大于3,将调用游戏开始函数或初始化函数。

  鼠标控制的移动飞机移动只需要将鼠标移动事件绑定到其父节点,然后改变player中X和Y的数据(X和Y的值不能小于0,X和Y的值不能大于父节点的宽度和高度)并将飞机交给玩家。

  要消灭敌人,只需要把子弹和敌人的X,Y计算进行对比。

  

二、所需知识点

  1.Vue事件绑定

  2.Vue监控事件

  3.Vue计算属性

  4.Vue风格操作

  

三、实现步骤

  第一步:创建HTML和CSS文件

  超文本标记语言

  !声明文档类型

  超文本标记语言

  头

  meta charset=utf-8

  TitleVue飞机战斗/标题

  link rel= style sheet href= CSS/style . CSS

  /头

  身体

  主要的

  -

  div class=游戏飞机

  @mousemove=touchmove

  :style= { background position: 0px positionY px } ref= plane

  div id=hit

  H2被摧毁:{{ hitCount }}/h2

  H2与敌机相撞:{{ boom }}/h2

  H2点击次数:{{ HitTimes }}/h2

  H2用户名:{{用户名}}/h2

  /div

  !-玩家-

  img src= image/player . png alt= player id= p :style= { top:p . y px ,left:p.x px}

  !-星球-

   img v-for=(item,index)of plane . arr :style= { top:item . y px ,left:item . x px } src= image/plane . png alt= plane

  !-敌人-

   img v-for=(item,index)of e . arr :style= { top:item . y px ,left:item . x px } src= image/e . png class= e alt= e

  !子弹

  img v-for=(item,index) of bullets.arr class=b

  :style={top:item.y px ,left:item.x px}

  :src=item.tag==p ? image/p_b.png : image/e_b.png

  alt=p_b

  /div

  !-开始面板-

  div class=alert ref=alert

  div class=内容

  div class=left

  H1Vue飞机战斗/h1

  p作者:柴不是柴/p

  img:src= face change class= face

  /div

  div class=右

  input= text v-model= username placeholder=请输入您的姓名

  type= submit @ click= startbtnclick value=开始游戏

  /div

  /div

  /div

  /main

  script src=js/vue.js/script

  script src=js/data.js/script

  script src=js/app.js/script

  /body

  /html

  半铸钢钢性铸铁(Cast Semi-Steel)

  * {

  填充:0;

  边距:0;

  }

  主要{

  显示器:flex

  justify-content:居中;

  对齐-项目:居中;

  宽度:100%;

  身高:100vh

  背景色:# 282828;

  }

  主要的。游戏平面{

  位置:相对;

  宽度:1200px

  最大宽度:1200像素;

  高度:900px

  背景-图像:url(./image/background . png);

  背景尺寸:100%自动;

  box-shadow: 0 2px 30px rgba(255,255,255,0.5);

  溢出:隐藏;

  }

  主要的。游戏平面图像{位置:绝对;}。警报{

  位置:绝对;

  top:calc(50%-100px);

  左:0;

  宽度:100%;

  高度:200像素

  背景:# FFF;

  箱形阴影:0 0 0 999em rgba(0,0,0,0.5);

  }。警惕。内容{

  显示:网格;

  网格-模板-列:4fr 6fr

  网格-模板-行:100%;

  差距:20px

  边距:0自动;

  最大宽度:1200像素;

  宽度:100%;

  身高:100%;

  }。警惕。内容。左侧{

  显示器:flex

  伸缩方向:列;

  对齐-项目:居中;

  对齐-内容:居中;

  }。警惕。内容. left * { margin:5px 0;}。警惕。内容。右{

  显示器:flex

  伸缩方向:列;

  对齐-项目:居中;

  对齐-内容:居中;

  }。警惕。内容。右输入{

  宽度:100%;

  显示:块;

  框大小:边框-框;

  填充:10px

  }。e {变换:旋转(180度);}。b {宽度:30px} #点击{

  位置:绝对;

  top:20px;

  左:20px

  颜色:# FFF;

  }

  第二步:创建一个全局数据文件

  窗户。El=文档。查询选择器(.游戏平面);

  window.data={

  p : {//玩家运动员

  w:document . query selector(" # p ").偏离宽度,

  h:document . query selector(" # p ").偏高,

  x:El。offsetwidth/2-文档。查询选择器(“# p”).偏移量/2,

  y:El。偏八-文档。查询选择器(“# p”).偏高

  },

  e : {//敌机敌机

  arr : [],

  速度:6,

  },

  平面:{ arr : [] },//星球

  项目符号:{ arr : [] },//子弹

  点击次数:0,//击中总数

  boom : 0,//碰撞次数

  HitTimes : 0,//被击中次数

  start : false,//游戏是否开始

  positionY : 0,//背景Y值

  计时器:[],//定时器

  脸:普通,//表情

  用户名: //玩家名

  }

  第三步:创建某视频剪辑软件实例

  var Game=new Vue({

  El:“主”,

  数据,

  方法:{

  startBtnClick() {

  if ( this.username.length=2)返回警报(用户名不可少于3位字符哦!);

  这个。init();

  },

  init() {//初始化

  让这个=这个

  this.start=true

  这个参考文献。警惕。风格。display= none

  这个。createe();

  这个。创建平面();

  这个。计时器。推(setInterval(这个。bgmove,20))

  这个。计时器。push(setInterval(function(){ _ this。move( bullets )},20))

  },

  bgMove () { //背景移动顺带判断玩家是否装上敌军

  这个。positiony=5;

  如果(这个。hit _ check(这个。p))这个。boom

  },

  touchmove(){//飞机移动

  让触摸,x,y;

  如果(!this.start)返回;

  如果(事件。触摸)触摸=事件。触摸[0];

  否则触摸=事件;

  x=touch.clientX - this .$参考文献。飞机。向左偏移-这个。p . w/2;

  y=touch.clientY - this .$参考文献。飞机。偏置-这个。p . h/2;

  y=y 0?0 : y(这个参考文献。飞机。偏八-这个。p . h)?这个参考文献。飞机。偏八-这个。p . h:y;

  x=x 0?0 : x(这个参考文献。飞机。偏-这个。p . w)?这个参考文献。飞机。偏-这个。p . w:x;

  这个。p . x=x

  这个。p . y=y

  },

  createE() { //创建敌军

  let _this=this,x;

  这个。计时器。push(setInterval(function(){

  x=数学。ceil(数学。random()*(_ this .$参考文献。飞机。offsetwidth-80));

  _this.build(e ,{ x: x,y: 5 })

  }, 1000 ));

  这个。计时器。push(setInterval(function(){ _ this。move( e )},20));

  },

  createPlane() {//创建行星

  let _this=this,x;

  这个。计时器。push(setInterval(function(){

  x=数学。ceil(数学。random()*(_ this .$参考文献。飞机。offsetwidth-80));

  _this.build(plane ,{ x: x,y: 5 })

  }, 2000 ));

  这个。计时器。push(setInterval(function(){ _ this。move( plane )},20));

  },

  createButter(table,e) {//创建子弹

  如果(!this.start)返回;

  让布尔特={

  x:(e.x (e.w?e.w : 30)/2),

  y:e.y - (e.h?体长:-30),

  speed : table==p ?-6 : 10,

  标签:表格

  };

  this.build(bullets ,bullter);

  },

  构建(表,数据){//公共创建

  让这个=这个

  本[表].arr.push(数据);

  },

  移动(表格){//公共移动

  对于(设I=0;我本[表].由…改编长度;i ){

  设e=这个[表]。arr[i],

  math=Math.random() * 100

  速度=这个[表格]。速度?这张[桌子]。速度:5;

  if(table== bullets )speed=e . speed;

  e.y=速度;

  如果(表!==bullets ) {//如果不是子弹数字正射影像图的移动

  如果(例如这个参考文献。飞机。偏移高度-55)本【表】。由…改编拼接(I,1);

  if(table== e math 1){ this。创造黄油( e ,e);}

  }否则{

  if ( e.tag==p ) {

  如果(这个。hit _ check(e))这个[表]。由…改编拼接(I,1);

  else if(e y 0)这个[table]。由…改编拼接(I,1);

  }否则{

  if ( this.hit(e,this.p) ) {

  this[table].arr.splice(i,1);

  这个HitTimes

  }

  否则如果(例如这.$参考文献。飞机。偏移高度-30)本【表】。由…改编拼接(I,1);

  }

  }

  }

  },

  hit_check(b) {//是否击毁敌军

  对于(设I=0;我这就是arrive)长度;i ){

  如果(this.hit(b,this。e . arr[I]){

  这就是排列拼接(I,1);

  这个。点击次数;

  返回真实的

  }

  }

  },

  hit(b,e) {//碰撞

  设d=this.judgeHit( b.x,b.y,e.x,e . y);

  如果(草35)返回真实的

  },

  judgeHit(x1,y1,x2,y2) {//计算两个点的距离差

  设a=x1 - x2,

  b=y1 - y2,

  result=Math.sqrt( Math.pow( a,2) Math.pow( b,2));

  返回数学.圆(结果);

  },

  pause() {//暂停

  this.start=false

  这个。计时器。foreach(element={ clear interval(element));})

  }

  },

  观察:{

  用户名(){//监听玩家输入事件

  如果(这个。用户名。长度2)这个。face=害羞;

  else this.face=普通;

  }

  },

  已安装(){

  让这个=这个

  document.onkeyup=function(e) {

  (e . key code==32)_ this。创造黄油( p ,_ this。p);

  //(e . key code==80)_ this。pause();

  }

  },

  已计算:{变脸(){ return image/ this。脸.png ;} }

  });

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: