cocos creator主程入門教程(一)—— 初識creator

我們在cocos creator新建一個Hello TypeScript項目,都會有一個assets/Scene/helloworld.fire文件。使用cocos creator開發游戲時,項目可以只有一個.fire文件。一般地,我會把這個文件夾改名為assets/scene,下面只有main.fire文件:assets/scene/main.fire。

雙擊main.fire文件,在層級管理器可以看到它的結構,

根節點是一個Canvas,點擊Canvas節點,在右邊的屬性面板可以看到Canvas組件有Design Resolution屬性,作為屏幕適配的尺寸。例如設置為1334x750,那么美術出資源時一屏界面的大小就是這個尺寸。不同的手機屏幕引擎自動做等比例縮放,具體縮放倍數,當勾選Fix Width表示界面的寬縮放到跟實際屏幕一樣,當勾選Fix Height表示界面的高縮放到跟實際屏幕一樣。另外一邊相應等比例縮放,可能小于屏幕大小而出現黑邊,也可能大于屏幕而被裁剪,這些可能都不是我們想要的,后面會說怎么解決。

cocos creator2.1.0版本默認Canvas下面有Main Camera子節點,其他子節點是模版示例,直接刪除。一般我還會給Canvas添加兩個子節點,一個sceneLayer作為場景根節點,一個popupLayer作為彈窗根節點。因為場景我們寧愿超框被裁剪,也不希望看到黑底,彈窗則希望能完整顯示,但引擎本身是統一處理的。分開兩個不同的根節點,在加載后根據屏幕大小單獨調整場景根節點sceneLayer的縮放讓他鋪滿屏幕。對于微信小游戲之類,單獨調整下移彈窗根節點popupLayer,避免與微信小游戲的關閉按鈕重合。

然后,就可以開始寫入口腳本,把它掛到Canvas節點。cocos creator采用組件模式,每個節點都可以掛載不同的組件,包括自己開發的腳本組件。新建一個StartCtrl.ts,所有跟界面節點關聯的腳本類都繼承自cc.Component,由于creator是使用裝飾器語法來檢查屬性的,所以要用到@property和@class裝飾器,其中@property用于聲明編輯器可以檢查到的屬性,我們可以聲明兩個屬性,sceneLayer和popupLayer屬性,用于關聯界面的場景根節點和彈窗根節點,@class用于聲明編輯器可以掛到節點的類。cc.Component定義了一系列生命周期方法,在節點不同生命周期會調用。下面是入口腳本的簡單實現。

/**

* auth: 關健昌

* date: 2018-11-17

* desc: 游戲入口

* modify:

*/const {ccclass, property} = cc._decorator;

@ccclass

export default class StartCtrl extends cc.Component {

? ? @property(cc.Node)

? ? popupLayer: cc.Node =null;

? ? @property(cc.Node)

? ? sceneLayer: cc.Node =null;? ? start () {

// TODO Add Start Code? ? }}

在編輯器選擇Canvas節點,在屬性面板點擊“添加組件”,選擇用戶腳本組件,選擇StartCtrl,拖sceneLayer和popupLayer兩個節點到屬性面板對應屬性,這樣就關聯好入口腳本。啟動游戲后,Canvas的生命周期就會觸發StartCtrl里對應的方法,StartCtrl里的sceneLayer和popupLayer屬性已被賦值為Canvas對應的子節點。后面我們會繼續講解如何使用這兩個屬性對界面進行分層管理。

現在,我們先看看怎樣制作界面。我們可以把每一個界面都做成一個prefab預制體。同樣在assets目錄下,會看到一個叫Texture的目錄,先把它改成resources,因為cocos加載資源時對resources有特殊處理,后面會講解。在這個目錄下再建一個目錄叫prefabs,assets/resources/prefabs專門用來存放界面的預制體。

制作預制體的方法很簡單。先雙擊scene/main.fire打開,在Canvas節點右鍵新建空白節點,屬性面板將新節點名字改為TestView,拖動該節點到資源管理器面板的assets/resources/prefabs目錄。這樣一個預制體TestView就生成了,這時可以在main.fire的Canvas節點中刪除TestView這個子節點,我們已經不需要這個子節點。

在資源管理器目錄找到assets/resources/prefabs目錄,雙擊TestView.prefab打開這個預制體,可以看到里面是空的,可以先設置根節點的Size,這就是這個界面的設計大小。然后可以開始用cocos的ui組件、渲染組件布局界面,cocos的ui組件、渲染組件使用參看cocos官方文檔。

然后,同樣我們可以開始寫這個界面的腳本TestViewCtrl.ts,控制界面邏輯和刷新。這個腳本還是繼承cc.Component,定義對應的cc.Label等類型的屬性,這樣就可以把界面的元素關聯到腳本,通過腳本來刷新。

/**

* auth: 關健昌

* date: 2018-11-17

* desc: 測試界面

* modify:

*/const {ccclass, property} = cc._decorator;

@ccclass

export default class TestViewCtrl extends cc.Component {

? ? @property(cc.Label)

? ? label: cc.Label =null;// LIFE-CYCLE CALLBACKS:// onLoad () {}start () {

this.label.string = "hello";? ? }

// update (dt) {}}

打開回剛才那個預制體,選擇根節點,在屬性面板選擇添加組件TestViewCtrl,并將對應ui組件拖到腳本組件的屬性上進行關聯,這樣我們就可以通過TestViewCtrl控制這個界面了。

要顯示這個界面,首先要加載prefab。cocos提供了cc.loader.loadRes接口,類型傳cc.Prefab,加載成功后通過cc.instantiate接口把預制體實例出一個cc.Node,cocos的界面布局是基于組合模式的一棵樹,cc.Node通過addChild把其他cc.Node添加到界面。所以,我們通過popupLayer.addChild把這個界面放到屏幕,這些代碼可以寫在入口腳本StartCtrl的start方法里。可以通過cc.Node.getComponent獲取TestViewCtrl的實例來操作界面。不過,我一般是通過cc.Component的生命周期和消息來實現界面更新,降低耦合,后面會詳細介紹這種方式。

/**

* auth: 關健昌

* date: 2018-11-17

* desc: 游戲入口

* modify:

*/const {ccclass, property} = cc._decorator;

@ccclass

export default class StartCtrl extends cc.Component {

? ? @property(cc.Node)

? ? popupLayer: cc.Node =null;

? ? @property(cc.Node)

? ? sceneLayer: cc.Node =null;

? ? start () {

    cc.loader.loadRes("prefabs/TestView", cc.Prefab, (err, result) => {

? ? ? ? ? ? ? ? if(!err) {

? ? ? ? ? ? ? ? ? ? return;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? let prefab = result as cc.Prefab;

? ? ? ? ? ? ? ? let view = cc.instantiate(prefab);

// let ctrl = view.getComponent(TestViewCtrl);

this.popupLayer.addChild(view);

? ? ? ? ? ? });

? ? }

}

?現在我們已經知道怎樣建立游戲入口,怎樣制作、加載、顯示界面,下一章將講解怎樣對彈窗分層管理。

點擊鏈接加入群聊【cocos?creator資源分享】:https://jq.qq.com/?_wv=1027&k=5lhq1wv

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容