当前位置: 首页 > Web前端 > HTML5

白鹭实战开发笔记,飞行射击游戏(二)

时间:2023-04-05 01:53:14 HTML5

今天记录一下工厂实现的子弹系统,包括子弹实现、工厂设计模式、子弹管理ZDManager。详细代码过程如下:实现目标1.实现子弹子弹类放在MainGame中,所以MainGame对象需要存放在子弹类中。1publicgame:MainGame;2publicconstructor(game:MainGame){3super();45this.game=game;6}7}移动速度原理:n:向上的角度为正方向,n角度向右顺时针旋转(子弹向上)已知角度n可以通过使用对边和斜边来计算。VVX=V*sinnVy=-V*cos为什么n是-y:因为向上运动是-//sin使用弧度制而n是角度制,所以n*Math.PI/180转换为弧度。1this.vx=v*Math.sin(n*Math.PI/180);2this.vy=-v*Math.cos(n*Math.PI/180);如果需要任何角度运动,指定速度和角度,他的横向距离,横向速度,纵向速度。就是上面代码的前提:图片垂直向上,正方向为顺时针。如果出现这种情况,那肯定是代码错误,但不是编译错误,而是代码中的逻辑错误。①空指针:使用没有结构的对象一般情况下,如果在同一个界面上看不到任何东西,那肯定是构造有问题,而在构造之初的问题往往是空指针。这里的构造使用了this.player.x,但是player没有构造,不存在,所以使用了它的坐标,所以报错的堆叠顺序与结构无关,addChild()与图片的堆叠,所以先构造所有东西,然后全部加上1this.bg=newBG(this);2this.player=newPlayer(this);3//x,y,速度,角度4this.zd=newZD(this.player.x,this.player.y,20,30,this);56this.addChild(this.bg);7this.addChild(this.zd);8this.addChild(this.player);子弹系统:首先,有大量的子弹,而且子弹的数量是可变的。如果你开火,你就拥有它,如果你不开火,你就没有。这时候就不得不用到工厂设计模式2了,工厂设计模式就是用来解决大量变量对象的生成和管理的。工厂在游戏中被广泛使用。核心:只要执行工厂的create方法,create方法就会生成一个对象,这个对象会被管理在工厂的仓库中。不断执行factorycreate,工厂会有一个仓库,生产出来的会放在仓库里流通。但是,当仓库中的商品满足一定条件时,仓库中的物品就会被移除。如果使用工厂来管理对象,这个对象必须有一个属性:visible(vis)属性:boolean类型表示它是否仍然可以存储在工厂中。只要vis==false。该对象将被移除以确保仓库不会满。vis==true可以存储。工厂管理的所有对象都必须具备离开工厂的条件,即在什么情况下该对象不再需要存在。例如,超出屏幕的子弹是不存在的。ZD类应用publicvis:boolean;//生存结构:this.vis=true;更新://子弹超出屏幕,子弹消失//工厂管理的对象必须有销毁条件。Bullet类update()方法if(this.x<-100||this.x>580||this.y<-100||this.y>900)this.vis=false;三。子弹管理类ZDManager实现工厂需要一个对象来管理子弹。子弹管理器类。将来,管理一个对象将需要一个管理器类。子弹管理器也必须在游戏中内置,需要指向上层的指针。仓库是子弹的数组应用:publiczm:Array;//Array动态数组(容器),通过添加、添加对象、移除对象。公共游戏:MainGame;构造:this.game=game;this.zm=newArray();增加生产对象的方法//每创建一个新的,仓库对象越多,子弹越多1publiccreate(x:number,y:number,v:number,n:number,game:MainGame){2//生成子弹3letone=newZD(x,y,v,n,game);4//添加到世界5this.addChild(one);6//放在仓库数组的末尾7this.zm.push(one);8//9}Update方法//更新所有的子弹,找到每一个子弹,对每个子弹更新1个publicupdate(){2//整个仓库的长度,可以用一个循环循环出所有的子弹3for(leti=0;i=4){9//调用create生成子弹10//这里添加2个弹道,一共5个弹道,更多视觉效果11this.zm.create(this.player.x,this.player.y,20,0,this);12this.zm.create(this.player.x,this.player.y,20,-15,this);13this.zm.create(this.player.x,this.player.y,20,-30,this);14this.zm.create(this.player.x,this.player.y,20,15,this);15this.zm.create(this.player.x,this.player.y,20,30,this);16this.t=0;17}18}至此,第二天的开发笔记已经完成,还需要坚持学习,一定要坚持到最后才会有结果。每天写笔记,记录自己的学习内容。以后有需要的可以去看看,大家一起学习。