aircraft-war(四)

aircraft-war(四)

敵機(jī)分為三種類型浑玛,所以需要三種Prefab,分別有自己的爆炸動(dòng)畫噩咪,可以共用一套腳本顾彰,要隨機(jī)出現(xiàn)X軸初始位置。
接下來先制作一個(gè)“可以被擊落的敵機(jī)”:

敵機(jī)Demo

從資源選擇器中拖拽素材到層級(jí)選擇器 → 添加碰撞組件 → 添加動(dòng)畫組件(在資源管理器創(chuàng)建動(dòng)畫資源) → 編寫腳本 → (將組建從層級(jí)選擇器拖拽到資源選擇器(Prefab資源))
碰撞組件之前剛做過胃碾,再次跳過涨享,下圖為添加動(dòng)畫組件:

image.png

接下來編寫腳本:

// enemy.js
cc.Class({
    extends: cc.Component,

    properties: {
        HP: {
            default: 0,
            type: cc.Integer,
            tooltip: '敵機(jī)血量',
        },
        speedMax: 0,
    },

    // use this for initialization
    onLoad: function () {
        this.speed = cc.random0To1() * this.speedMax;
        let manager = cc.director.getCollisionManager();
        manager.enabled = true;
    },
    //碰撞檢測
    onCollisionEnter: function(other, self){
        
    },

    // called every frame, uncomment this function to activate update callback
    update: function (dt) {
        this.node.y -= dt * this.speed;
    },
    onHandleDestroy: function () {
        // Demo中零時(shí)使用,后續(xù)要使用對(duì)象池仆百,參考bullet
        this.node.destroy();
    }
});

接下來需要給子彈Prefab添加碰撞組件厕隧。
在這里會(huì)遇到一個(gè)問題,各個(gè)組件都有碰撞組件俄周,那敵機(jī)相互不就撞毀了嗎吁讨?有沒有什么辦法可以限制碰撞對(duì)象?

碰撞分組管理

使用碰撞分組管理

image.png

之后在組件的屬性檢查器中選擇分組:


image.png

接下來修改腳本:

cc.Class({
    extends: cc.Component,

    properties: {
        HP: {
            default: 0,
            type: cc.Integer,
            tooltip: '敵機(jī)血量',
        },
        speedMax: 0,
    },

    // use this for initialization
    onLoad: function () {
        // 速度隨機(jī)[speedMax, speedMin]
        this.speed = Math.random() * (this.speedMax - this.speedMin + 1) + this.speedMin;
        let manager = cc.director.getCollisionManager();
        manager.enabled = true;
    },
    //碰撞檢測
    onCollisionEnter: function(other, self){
        if (other.node.group !== 'bullet') {
            return;
        }
        if (this.HP === 0) {
            this.HP--;
            let anim = this.getComponent(cc.Animation);
            let animName = this.node.name + '_exploding';
            anim.play(animName);
            anim.on('finished',  this.onHandleDestroy, this);
            return;
        }
        if (this.HP > 0) {
            this.HP--;
        }
    },

    // called every frame, uncomment this function to activate update callback
    update: function (dt) {
        this.node.y -= dt * this.speed;
    },
    onHandleDestroy: function () {
        // Demo中零時(shí)使用栈源,后續(xù)要使用對(duì)象池挡爵,參考bullet
        this.node.destroy();
    }
});

Bullet:

cc.Class({
   // ...
    //碰撞檢測
    onCollisionEnter: function(other, self){
        this.bulletGroup.destroyBullet(self.node);
    },
   // ...
});

第一步就算完成了竖般,實(shí)現(xiàn)功能是第一步甚垦,接下來要做的就是使用對(duì)象池,制作大批敵機(jī)涣雕,處理敵機(jī)出現(xiàn)的位置:

image.png

代碼在這里

敵機(jī)組

先將其他兩種類型的敵機(jī)做成Prefab作為準(zhǔn)備資源艰亮,然后創(chuàng)建參考bulletGroup的制作方式,來制作enemyGroup挣郭。


image.png

腳本代碼請(qǐng)參考——敵機(jī)組起飛代碼
現(xiàn)在敵機(jī)組也起飛了迄埃,但是有個(gè)問題,被銷毀的敵機(jī)回歸對(duì)象池后兑障,下一次出場時(shí)侄非,還保持著被銷毀時(shí)的狀態(tài),所以需要初始化一下:

image.png

給enemy.js添加初始化函數(shù):

// enemy.js
 enemyInit: function () {
            // 初始化血量
        this.enemyHp = this.HP;
        // 找到node的Sprite組件
        let nSprite = this.node.getComponent(cc.Sprite);
        // 初始化spriteFrame
        if (nSprite.spriteFrame != this.initSpriteFrame){
            nSprite.spriteFrame = this.initSpriteFrame;
        }
    },
    // 碰撞檢測
    onCollisionEnter: function(other, self){
        if (other.node.group !== 'bullet') {
            return;
        }
        if (this.enemyHp === 0) {
            this.enemyHp--;
            let anim = this.getComponent(cc.Animation);
            let animName = this.node.name + '_exploding';
            anim.play(animName);
            anim.on('finished',  this.onHandleDestroy, this);
            return;
        }
        if (this.enemyHp > 0) {
            this.enemyHp--;
        }
    },

然后在創(chuàng)建敵機(jī)的時(shí)候流译,要執(zhí)行一遍初始化函數(shù):

// enemyGroup.js
 // 生成敵機(jī)
    genNewEnemy: function (enemyInfo) {
        let poolName = enemyInfo.name + 'Pool';
        let newNode = D.common.genNewNode(this[poolName], enemyInfo.prefab, this.node);
        let pos = this.getNewEnemyPosition(newNode);
        newNode.setPosition(pos);
        newNode.getComponent('enemy').enemyGroup = this;
        // 初始化敵機(jī)狀態(tài)
        newNode.getComponent('enemy').enemyInit();
    },

參考代碼在這里
到這里逞怨,整體主要功能都已經(jīng)實(shí)現(xiàn),接下來要完成的福澡,是游戲的積分叠赦、開始暫停與音效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末革砸,一起剝皮案震驚了整個(gè)濱河市除秀,隨后出現(xiàn)的幾起案子糯累,更是在濱河造成了極大的恐慌,老刑警劉巖册踩,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泳姐,死亡現(xiàn)場離奇詭異,居然都是意外死亡暂吉,警方通過查閱死者的電腦和手機(jī)仗岸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來借笙,“玉大人扒怖,你說我怎么就攤上這事∫导冢” “怎么了盗痒?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長低散。 經(jīng)常有香客問我俯邓,道長,這世上最難降的妖魔是什么熔号? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任稽鞭,我火速辦了婚禮,結(jié)果婚禮上引镊,老公的妹妹穿的比我還像新娘朦蕴。我一直安慰自己,他們只是感情好弟头,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布吩抓。 她就那樣靜靜地躺著,像睡著了一般赴恨。 火紅的嫁衣襯著肌膚如雪疹娶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天伦连,我揣著相機(jī)與錄音雨饺,去河邊找鬼。 笑死惑淳,一個(gè)胖子當(dāng)著我的面吹牛额港,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播汛聚,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼锹安,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叹哭,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤忍宋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后风罩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糠排,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年超升,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了入宦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡室琢,死狀恐怖乾闰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盈滴,我是刑警寧澤涯肩,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站巢钓,受9級(jí)特大地震影響病苗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜症汹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一硫朦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧背镇,春花似錦咬展、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至济瓢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妹卿,已是汗流浹背旺矾。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夺克,地道東北人箕宙。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像铺纽,于是被迫代替她去往敵國和親柬帕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • This article is a record of my journey to learn Game Deve...
    蔡子聰閱讀 3,779評(píng)論 0 9
  • 111. [動(dòng)畫系統(tǒng)]如何將其他類型的動(dòng)畫轉(zhuǎn)換成關(guān)鍵幀動(dòng)畫? 動(dòng)畫->點(diǎn)緩存->關(guān)鍵幀 112. [動(dòng)畫]Unit...
    胤醚貔貅閱讀 13,012評(píng)論 3 90
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫陷寝、插件锅很、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評(píng)論 4 62
  • 一個(gè)夕陽暖暖的午后,村中間‘井子彎’大橋的石墩上凤跑,坐著一簇簇的男男女女爆安,老老少少,而路橋東頭的另一頭則聚集了一幫大...
    粉色的桃林閱讀 432評(píng)論 12 11
  • 她發(fā)現(xiàn)其他供應(yīng)商在對(duì)員工做這項(xiàng)服務(wù)的鼓勵(lì)機(jī)制上是不同的仔引。A又了解了其他同行做相近服務(wù)的做法扔仓,發(fā)現(xiàn)資金投入量是大大超...
    海若音閱讀 234評(píng)論 0 0