cocoscreator練手 入門 Flappy Bird 像素鳥項目(2)加入水管

這次加個水管,效果是生成水管,並且讓水管自動向左移動

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

製作水管預製

cocoscreator在生成節點的策略中,提供了預製節點的方案,就相當於把節點的默認值設定好,然後保存爲文件,在需要的時候利用腳本生成。

像素鳥中需要不停的生成水管,所以需要用到水管的預製節點。

cocoscreator中製作預製節點需要先用設置普通節點的方法設置節點,然後將節點拖入資源中。

設置單個節點

在我提供的素材中,有水管的上部分和下部分:
在這裏插入圖片描述
在層級管理器(就是遊戲存放節點的地方)中新建一個節點,名叫pipe,把上面兩個圖片拖入該節點生成該節點的子節點:
在這裏插入圖片描述
做好之後應該長這樣。

然後來編輯這兩個水管,首先先讓水管的x值都爲0,y值讓pipe_down爲580,pipe_up爲-580,寬度爲52,長度爲1000(長度1000是爲了讓他可以超出屏幕,不會被玩家看到尾部,y值爲580的目的是長度的一半是500,然後就會多80的間隙,兩個水管都這樣設置就會在中間有160的間隙,可以讓鳥通過):

上圖爲pipe_down的設置,pipe_up的值只有position的y是負的,其他都一樣。

設置好之後,你會發現圖變形了,水管頭部會被拉伸,就會很難看,這是因爲cocoscreator默認對圖像進行原來xy直接拉昇,這個需要設置一下,讓他不該拉伸的不拉伸。

這邊只設置pipe_down的,pipe_up記得自己設置下。

在左側層級管理器中點擊pipe_down節點,在右邊的屬性檢查器中點擊下圖的編輯。
在這裏插入圖片描述
然後應該會出現如下界面:
在這裏插入圖片描述
上圖中的值是設置好的,照着設置就行,pipe_up的區別是Bottom爲0,Top爲30。

解釋一下,這個東西是一個九宮格的圖像設置:
在這裏插入圖片描述
圖像設置之後,位於被拉的區域,在圖像大小改變之後就會被拉伸,位於不拉的區域,圖像大小改變之後就不會做改變。

將上下都設置好之後,水管應該是這個樣子的,整體的位置在哪無所謂,兩個水管的相對位置一樣就行:
在這裏插入圖片描述

製作預製:

把單個節點設置好之後,就可以做成預製節點(Prefab)了,在資源管理器中新建一個文件夾,名字叫Prefab,把層級管理器中的pipe節點拖入剛剛新建的文件夾中,結果應該是這樣的:
在這裏插入圖片描述
pipe是一個整體,注意將整個pipe拖入,拖入之後就可以在層級管理器中把pipe整個刪掉。

以後要修改水管的話,雙擊pipe的預製文件,就可以對它進行編輯。

開始整水管生成的邏輯

要生成水管的話,我們最好新建一個所有水管的父節點,以便對水管進行管理。在層級管理器中新建pipes:
在這裏插入圖片描述
之後生成的節點都會存放在這個文件夾中,我們生成節點和移動節點的腳本也會掛載在這個節點中。

開始寫腳本

在Script文件夾中新建一個javascripe腳本文件,名字叫做pipes:
在這裏插入圖片描述
雙擊打開,開始編寫代碼,在後面都有源碼,如果有看圖片看不懂的,可以直接看源碼:

首先,在我們需要在節點中應用到預製節點,這邊還加了一個水管速度的屬性:
在這裏插入圖片描述
pipePrefab就是水管的預製,pipe_speed就是水管移動的速度,後面需要在編輯器中對這兩個值進行設置。

取到預製節點之後,我們需要寫一個函數,利用預製生成一個節點,並讓這個腳本掛載的節點爲生成節點的父節點:
在這裏插入圖片描述
上面代碼中,41行是對函數的定義,括號中的position是傳入的變量。42行定義了一個變量,名字叫newPipe,用於表示生成的預製節點,等號後面的就是生成節點用的。43行把這個節點設置爲了這個腳本掛載節點的子節點。44行設置了新生成節點的位置。

寫好之後,我們需要在遊戲一開始的時候,生成一個水管,在onLoad函數中添加:
在這裏插入圖片描述
onLoad函數表示節點生成後加載的代碼,相當於初始化。17行調用了我們上面寫的函數,生成了一個節點,需要注意的是括號中的傳值,cc.v2()函數用於生成一個cocoscreator的二維座標,第一個參數爲x值,第二個參數爲y值,這邊y值調用了另一個函數,這個函數用於隨機生成一個固定範圍內的y值,函數具體如下:

在這裏插入圖片描述
上圖不做過多解釋了,不懂請自行百度。

最後,我們需要移動水管,代碼如下:
在這裏插入圖片描述
具體功能圖片中都寫了,需要提的是updata是每一個週期執行一次。

全部代碼:


cc.Class({
    extends: cc.Component,

    properties: {
        pipePrefab:{
            default: null,
            type: cc.Prefab
        },

        pipe_speed: 0
    },

    // LIFE-CYCLE CALLBACKS:

    onLoad () {
        this.spawnNewPipe(cc.v2(150, this.spawnY()));
    },

    start () {
    },

    update (dt) {
        //移動水管
        for(let i = 0; i < this.pipe_speed; i++){
            var children = this.node.children;
            for(let j = 0; j < children.length; j++){
                children[j].x--;
                //生成新的水管
                if(children[j].x == -50)
                    this.spawnNewPipe(cc.v2(350, this.spawnY()));
                //銷燬水管
                if(children[j].x <= -500)
                    children[j].destroy();    

                //todo 在鳥越過水管之後,分數++    
            }
        }
    },

    spawnNewPipe: function(position){
        var newPipe = cc.instantiate(this.pipePrefab);
        this.node.addChild(newPipe);
        newPipe.setPosition(position);
    },

    spawnY: function(){
        //爲水管生成一個y座標,上下封頂分別爲350,-350
        return (Math.random()*2-1)*350;
    }
});

設置,運行

在這裏插入圖片描述
點擊pipes,把pipes腳本拖入右邊空白的地方,把pipe的預製拖入pipe prefab框框中,設置pipe speed爲2,保存,點擊上面的小三角運行,沒問題的話就可以看到生成了水管,並且不斷向左邊移動。

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