Egret實(shí)戰(zhàn)開發(fā)筆記,飛行射擊游戲(二)

簡介

Egret實(shí)戰(zhàn)開發(fā),記錄每天的學(xué)習(xí)進(jìn)度环础,歡迎和我一起學(xué)習(xí)交流~

實(shí)現(xiàn)目標(biāo)

今天是開發(fā)飛行射擊游戲第二天,工廠實(shí)現(xiàn)子彈體系饮亏。歡迎大家和我一起學(xué)習(xí)哦~ 下面是詳細(xì)過程代碼忆首,還有遇到的錯(cuò)誤以及改正方法。


在這里插入圖片描述

飛行射擊 工廠實(shí)現(xiàn)子彈體系

1.實(shí)現(xiàn)子彈類

子彈放在Maingame掉冶,就需要在子彈類中存放Maingame對象

public game:MainGame;
public constructor(game:MainGame) {
super();

this.game = game;
}
}

移動(dòng)速度原理:

在這里插入圖片描述

n:角度
向上是正方向,向右順時(shí)針旋轉(zhuǎn)n角度 (子彈向上)
知道角度n 就可以用對邊和斜邊求V
VX = V * sin n
Vy = -V * cos n
為什么是-y: 因?yàn)橄蛏献邽?-

//sin用的是弧度制 n是角度制真竖,所以 n* Math.PI / 180 轉(zhuǎn)換為弧度制。

this.vx = v * Math.sin(n * Math.PI / 180);
this.vy= -v * Math.cos(n * Math.PI / 180);

若 需要用到任意角度移動(dòng)厌小,給出指定速度和角度恢共,他的橫向距離,橫向速度璧亚,縱向速度讨韭。就是上面代碼
前提 :圖片豎直向上,正方向是順時(shí)針方向癣蟋、

在這里插入圖片描述

出現(xiàn)這種情況 肯定是代碼出錯(cuò)透硝,但不是編譯錯(cuò)誤,是代碼的邏輯錯(cuò)誤疯搅,

①空指針:使用了沒有構(gòu)造的對象

②反復(fù)移除了同一界面
一般情況下蹬铺,什么都看不到,肯定是構(gòu)造出現(xiàn)問題秉撇,而構(gòu)造初的問題甜攀,往往會(huì)空指針

這里的構(gòu)造zd使用this.player.x,然而player沒有構(gòu)造琐馆,不存在规阀,就使用它的坐標(biāo),所以報(bào)錯(cuò)
圖片疊加順序跟構(gòu)造沒關(guān)系瘦麸,addChild()才跟圖片疊加有關(guān)系
所以先全部構(gòu)造谁撼,再全部添加

this.bg = new BG(this);
this.player = new Player(this);
//              x,y, 速度,角度
this.zd = new ZD(this.player.x,this.player.y, 20 ,30,this);

this.addChild(this.bg);
this.addChild(this.zd);
this.addChild(this.player);

子彈體系:
首先子彈數(shù)量很多,子彈數(shù)量可變厉碟,發(fā)射就有喊巍,不發(fā)射就沒有。這時(shí)候就得用工廠設(shè)計(jì)模式

二.工廠設(shè)計(jì)模式

用來解決個(gè)數(shù)可變的大量對象的生成和管理箍鼓。在游戲中會(huì)大量使用工廠崭参。

核心:create 方法

只要執(zhí)行工廠的create,就會(huì)生成對象款咖,對象會(huì)被放在工廠的倉庫里管理何暮。
不斷的執(zhí)行工廠create,工廠會(huì)有一個(gè)倉庫铐殃,生產(chǎn)一個(gè)會(huì)放到倉庫里海洼,循環(huán),但是在倉庫里的產(chǎn)品富腊,當(dāng)滿足一定條件時(shí)坏逢,會(huì)對倉庫內(nèi)的對象進(jìn)行移除。
若用工廠管理對象赘被,這個(gè)對象就必須有一個(gè)屬性:
visible( vis)屬性: boolean類型代表是否還能在工廠存放是整。
只要vis == false。這個(gè)對象就要移除帘腹,來保證倉庫不會(huì)滿。
vis == true 可以存放许饿。

所有被工廠管理的對象都必須有離開工廠的條件阳欲,就是對象在什么情況下不需要再存在了。
比如子彈超出屏幕就不存在了陋率。

ZD類申請public vis:boolean; //是否生存
構(gòu)造:this.vis = true;
更新:
//子彈超出屏幕球化,子彈消失
//被工廠管理的對象一定要有銷毀條件。
子彈類update()方法
if(this.x < -100 || this.x > 580 || this.y < -100 || this.y > 900)
this.vis = false;

三.子彈管理類ZDManager

實(shí)現(xiàn)工廠就需要有一個(gè)管理子彈的對象瓦糟。子彈管理者類筒愚。以后管理某個(gè)對象都需要一個(gè)管理者類
子彈管理者也要構(gòu)建在game里,需要上一級(jí)的指針菩浙。
倉庫是有關(guān)子彈的數(shù)組
申請:public zm:Array<ZD>; //Array動(dòng)態(tài)數(shù)組(容器)巢掺,通過添加,添加對象劲蜻,移除對象陆淀。
public game:MainGame;
構(gòu)造:this.game = game;
this.zm = new Array();

增加生產(chǎn)對象的方法
//每create一次就new一個(gè),倉庫對象也越多,子彈也就越多

public create(x:number,y:number,v:number,n:number,game:MainGame){
        //生成子彈
        let one = new ZD(x,y,v,n,game);
        //添加到世界
        this.addChild(one);
        //放到倉庫數(shù)組最后
        this.zm.push(one);
        //
    }

更新方法
//更新所有子彈先嬉,找到每一顆子彈轧苫,每顆更新

public update(){
    //整個(gè)倉庫長度 ,利用循環(huán)可以循環(huán)出所有子彈
    for(let i = 0 ; i < this.zm.length ; i++){
        //找到每顆子彈
        let one = this.zm[i];
        one.update();
        //若子彈太多疫蔓,倉庫會(huì)滿含懊,所以子彈需要移除
        //子彈出屏身冬,vis == false。移除
        if(one.vis == false){
            //先從場景移除
            this.removeChild(one);
            //倉庫移除 
            this.zm.splice(i ,1);
            //移除一個(gè)對象岔乔,長度-1
            i--;
        }
    }
}

比如現(xiàn)在0酥筝,1,2重罪,3 樱哼,4,5更新到3剿配,發(fā)現(xiàn)3已經(jīng)移除搅幅,執(zhí)行移除方法,3消失呼胚,4跑到3的位置茄唐。5跑到4的位置再更新的時(shí)候,需要重新更新3蝇更,所以移除完 需要 i --;

此時(shí)在Maingame中把zd改為 public zm:ZDManager; //多個(gè)子彈

Maingame中的更新方法public update()


     public update()
    {
       this.bg.update();
       this.player.update();
       this.zm.update();
       //時(shí)間間隔
       this.t++;
       if(this.t >= 4){
           //調(diào)用create才會(huì)生成一顆子彈
           //這里加了2條彈道沪编,一共5條彈道,更有視覺效果
            this.zm.create(this.player.x,this.player.y,20,0, this );
            this.zm.create(this.player.x,this.player.y,20,-15, this );
            this.zm.create(this.player.x,this.player.y,20,-30, this );
            this.zm.create(this.player.x ,this.player.y,20,15, this );
            this.zm.create(this.player.x,this.player.y,20,30, this );
            this.t = 0;
       }
    }

至此年扩,第二天的開發(fā)筆記已經(jīng)完成蚁廓,學(xué)習(xí)需要堅(jiān)持,堅(jiān)持到最后一定會(huì)有結(jié)果厨幻,每天寫下筆記來記錄自己的學(xué)習(xí)內(nèi)容相嵌, 以后有需要也可以查看,大家可以一起學(xué)習(xí)况脆。

想要我一起學(xué)習(xí)的可以關(guān)注我的公眾號(hào) 知言不盡 找到我饭宾,交流學(xué)習(xí),獲取圖片素材和源代碼格了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末看铆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子盛末,更是在濱河造成了極大的恐慌弹惦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悄但,死亡現(xiàn)場離奇詭異肤频,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)算墨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門宵荒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事报咳∠姥叮” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵暑刃,是天一觀的道長厢漩。 經(jīng)常有香客問我,道長岩臣,這世上最難降的妖魔是什么溜嗜? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮架谎,結(jié)果婚禮上炸宵,老公的妹妹穿的比我還像新娘。我一直安慰自己谷扣,他們只是感情好土全,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著会涎,像睡著了一般裹匙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上末秃,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天概页,我揣著相機(jī)與錄音,去河邊找鬼练慕。 笑死惰匙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贺待。 我是一名探鬼主播徽曲,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼零截,長吁一口氣:“原來是場噩夢啊……” “哼麸塞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涧衙,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤哪工,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弧哎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雁比,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年撤嫩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偎捎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖茴她,靈堂內(nèi)的尸體忽然破棺而出寻拂,到底是詐尸還是另有隱情,我是刑警寧澤丈牢,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布祭钉,位于F島的核電站,受9級(jí)特大地震影響己沛,放射性物質(zhì)發(fā)生泄漏慌核。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一申尼、第九天 我趴在偏房一處隱蔽的房頂上張望垮卓。 院中可真熱鬧,春花似錦晶姊、人聲如沸扒接。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钾怔。三九已至,卻和暖如春蒙挑,著一層夾襖步出監(jiān)牢的瞬間宗侦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工忆蚀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矾利,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓馋袜,卻偏偏與公主長得像男旗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子欣鳖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容