cocoscreator練手 入門 Flappy Bird 像素鳥項目(3)加入小鳥

加入小鳥,這個博客結束後遊戲基本的邏輯就寫好了。

源碼和素材可在公衆號獲取(發送FlappyBird):
在這裏插入圖片描述

主角節點

在我提供的素材中,有bird0_0-2三個圖片,這三個圖片可以組合成像素鳥拍翅膀的動畫。

先將bird0_0拖入Main Camera節點下,名字改成bird0_0,設置位置爲(-100,0):
在這裏插入圖片描述
然後開始編輯像素鳥的動畫,cocosCreator自帶了一個動畫編輯器,點擊bird節點,點擊動畫編輯器:
在這裏插入圖片描述
提示應該是:要製作動畫,需要添加動畫組件之類,點擊添加就好:
在這裏插入圖片描述
然後會提醒我們缺少動畫Clip,先在資源管理器下面新建一個Clip文件夾,專門用於存放Clip文件,然後點擊新建Clip,把文件放到新建的Clip文件夾下即可:
在這裏插入圖片描述
新建完成後,先把bird節點上Animation組件的Default Clip設置爲剛剛我們新建的Clip,將你新建的Clip文件拖入這個框下:
在這裏插入圖片描述

然後就可以開始編輯動畫了,先點左上角的按鈕開始編輯,然後在屬性列表下的add property按鈕中選擇
cc.Sprite.spriteFrame,在資源管理器中將bird0_0-2每隔三幀拖入屬性列表,形成拍翅膀的動畫,在WrapMode中選擇loop,循環播放動畫,在Sample中設置爲30(30幀爲一秒,應該是)。這邊的設置用文字描述有點複雜,後面我可能會錄成視頻,有需要請關注公衆號,屆時會提醒。

在這裏插入圖片描述

設置碰撞

遊戲中,需要檢查像素鳥和水管,還有地板的碰撞,cocosCreator中內置了一套碰撞系統。

首先我們需要設置碰撞的分組。點擊項目-項目設置:在這裏插入圖片描述
裏面有個分組管理,默認是一個默認的分組,不需要動他,這邊我們需要三個分鐘,一個是像素鳥的分鐘,一個是水管分組,最後一個地板分組,新建好之後,下面就會有分組配對的設置,x軸上的分組和y軸上的分組交叉處若有打勾,則會產生碰撞,這個遊戲按下圖設置即可:
在這裏插入圖片描述
設置好後點擊保存,然後我們需要設置節點的分組與碰撞範圍。

點擊bird節點,在group中設置爲bird,點擊添加組件,選擇碰撞組件中的BoxCollider,值爲下:
在這裏插入圖片描述

在資源管理器中雙點我們之前保存的pipe預製,層級管理器中選擇pipe,Group選擇pipe,添加兩個BoxCollider組件,值如下:
在這裏插入圖片描述
設置好後ctrl+s保存,雙擊資源管理器中的Scenes文件夾下的main回到主場景,若有彈窗點擊保存即可。

最後設置地板的碰撞,在main camera中新建一個floor空節點,group中設置爲floor,添加一個BoxCollider組件,值如下:
在這裏插入圖片描述
碰撞整好了,後面寫腳本就行了。

編寫主角腳本

在Scripe文件夾下新建一個bird的Javascripe腳本文件。

properties中寫這些:
在這裏插入圖片描述

acc_y代表的是y軸方向的加速度,也就是遊戲中的重力加速度,用於控制像素鳥下墜;jump_speed是像素鳥跳躍時的速度,默認爲10,canvas是用於引入最外層節點的,用於判斷玩家點擊事件;pipes是所有pipe的父節點,這個腳本中用於初始化水管。

在onLoad中寫:
在這裏插入圖片描述

27行用於初始化速度,29行用於在canvas中註冊一個點擊事件,這個事件會觸發這個腳本的onTouchStart函數,31和33行啓用了碰撞系統,cocos默認關閉,需要我們在需要碰撞的地方自行開啓。38到40行則是對用戶點擊事件的處理,這邊是把像素鳥的y軸速度直接設置爲了跳躍速度。

在update函數中:
在這裏插入圖片描述
這個函數用於實時更新節點的位置,節點位置受到速度的影響,速度又收到加速度的影響,這是簡單的物理知識。

在腳本最後添加一個onDestroy函數:
在這裏插入圖片描述
這個函數用於註銷檢測點擊事件。

在腳本後面再添加兩個函數,分別是onCollisionEnter和gameover:
在這裏插入圖片描述
onCollisionEnter是進入碰撞時觸發的函數,這個函數中只執行了gameover函數,gameover函數中執行了一些初始化的操作,試像素鳥一碰撞就會被重置。

完整代碼如下:


cc.Class({
    extends: cc.Component,

    properties: {
        acc_y: 5,
        jump_speed:10,
        canvas:{
            type: cc.Node,
            default: null
        },
        pipes:{
            type: cc.Node,
            default: null
        }
    },

    // LIFE-CYCLE CALLBACKS:

    onLoad () {
        this.speed_y = 0;

        this.canvas.on(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);

        var manager = cc.director.getCollisionManager();

        manager.enabled = true;

        // manager.enabledDebugDraw = true;
    },

    onTouchStart(event) {
        this.speed_y = this.jump_speed;
    },

    onCollisionEnter: function (other, self) {
        this.gameover();
    },

    gameover: function(){
        this.node.y = 0;

        var pipesChildren = this.pipes.children;

        for(let i = 0; i < pipesChildren.length; i++){
            pipesChildren[i].destroy();
        }

        this.pipes.getComponent("pipes").onLoad();

        this.speed_y = 0;

    },

    start () {

    },

    update (dt) {
        this.speed_y -= this.acc_y * dt;
        this.node.y += this.speed_y;
    },

    onDestroy(){
        this.canvas.off(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);
    }
});

保存後回到CocosCreatro,將bird的腳本掛至bird節點上,配置bird腳本的屬性:
在這裏插入圖片描述
配置好後點擊小三角就可以再頁面中運行了。

小遊戲的主要邏輯已經全部完成,如果有時間的話我會繼續將聲音,得分,開始按鈕之類的加上,可以關注公衆號,如果有更新,會在上面推送。

這個目前完成的部分已經打包成了apk可以在手機中試玩運行,在公衆號中可以獲取到(發送FlappyBird)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章