Egret实战开发笔记,飞行射击游戏(三)

简介

今天是开发飞行射击游戏第三天,工厂实现子弹体系。

欢迎大家和我一起学习哦~ 下面是详细过程代码,还有遇到的错误以及改正方法。

实现效果

在这里插入图片描述

代码及过程

飞行射击 玩家子弹带多样性

一.如何创建更多种类的子弹?

在ZD类用种类索引id实现不同的子弹

在ZD类申请

public id:number;		//子弹种类索引
构造
this.id = id;
switch(this.id){
case 0 :
this.im = Main.createBitmapByName("pzd2_1_png");
this.addChild(this.im);
break;
case 1:
this.im = Main.createBitmapByName("pzd2_11_png");
this.addChild(this.im);	
}

构造完之后,ZDManager类会报错,在create方法中添加Id属性

调用create方法时,添加子弹id就可以了

玩飞行射击最核心的理念是玩家在躲子弹。

二:动画帧子弹实现(闪烁子弹)

闪烁是因为在更新中坐标进行直线运动还有动画帧的切换

循环动画实现
那么动画帧怎样切换:需要计时器,随着计时器改变,继而改变贴图,来回切换
2张图片三次主循环第一张,三次主循环第二张,一次变换的周期是六次主循环。3张图片,一次周期是六次。以此类推。

update方法中
if(this.id ==2){
this.t++;
if(this.t >= 6){		//这个6是帧数*帧时长。
this.t = 0;
//图片会变,所以t在0。1,2时除以3是0.几+3取整为3,t为3,4,5时除以3为1.几+3取整为4
//这样结果就为3和4之间变化。图片名为3和4
this.im.texture = RES.getRes("pzd2_"+Math.floor(this.t/3 + 3)+"_png");
	}	
}
this.t/3 这个33次主循环变一帧,就是帧时长。

   for(let i = 0 ; i < 10 ; i++){
              this.zm.create(2,this.player.x,this.player.y,15,Math.random()*360 , this );  
           } 

Math.random()*360 , 一圈是360度,Math.random()*360 实现0~360度之间子弹随机发射,

三.多状态子弹的实现

public m:number;        //子弹状态索引
//导弹
			case 3:
				this.im = Main.createBitmapByName("pzd1_3_png");
				this.addChild(this.im);
				this.t = 0;
				this.m = 0;
			break;
update()最开始的方法

	if(this.id == 3){
			this.im.texture = RES.getRes("pzd1_"+Math.floor(Math.random()*2 + 3)+"_png");
			switch(this.m ){
				//初始角度更新10次主循环
				case 0 :
					this.t++;
					this.x+=this.vx;
					this.y+=this.vy;
					if(this.t >=10){
						this.t =0;
						this.m =1;
					}
				break;
				//发出后停滞一段时间
				case 1:
					this.t++;
					if(this.t >=5){
						this.t =0;
						this.m =2;
						this.vy = 0;
					}
					break;
				//向上加速运动
				case 2:
					this.y+=this.vy;
					this.vy -=2;
					//这段是独立代码,所以需要检测出屏子弹消失
					if(this.y <-100)
						this.vis = false;
					break;
			}
			return;	//跳出
		}

因为是3和4之间改变,所以(Math.random()*2 + 3) (01)的数不包括1,然后*2就是(02之间数)+3取整就是3~4

return;在某些特殊代码 ,在if后return,条件满足,后面代码不执行。

四 增加玩家发射方法

把Maingame中的更新方法public update()剪切到Player类中,添加fire方法

//专用于发射子弹
	public fire(){
		this.t++;
		//每4次主循环发射一颗
		if(this.t %4 == 0){
			    this.game.zm.create(1,this.x,this.y,20,0,this.game);
		}
		if(this.t >= 15){
         this.game.zm.create(3,this.x,this.y,10,210,this.game);
		 this.game.zm.create(3,this.x,this.y,10,150,this.game);

            this.t = 0;

       }
	}

在这里插入图片描述
因为gif图片压缩的原因,可能有一些卡顿失真,但实际效果不会卡顿,请原谅
至此,第三天的开发笔记已经完成,学习需要坚持,坚持到最后一定会有结果,每天写下笔记来记录自己的学习内容, 以后有需要也可以查看,大家可以一起学习。

想要我一起学习的可以关注我的公众号 知言不尽 找到我,交流学习,获取图片素材和源代码。

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值