1:看一看下面這個網(wǎng)址,其中有關(guān)于cocos腳本編輯器visual studio code的代碼提示的設(shè)置,挺好的,只要先把creator.d.ts文件用visual studio code打開,然后再用visual studio code打開cocos中的腳本文件就會有代碼提示功能。
參考網(wǎng)址:
https://blog.csdn.net/stillwater123/article/details/79186404
https://docs.cocos.com/creator/manual/zh/getting-started/coding-setup.html
2:將一個腳本添加到一個組件上的方法:點(diǎn)擊組件,然后在屬性檢查器中將腳本的"導(dǎo)入為插件"取消勾選,然后就可以將腳本直接拖到場景中的組件上了。
參考網(wǎng)址:
https://tieba.baidu.com/p/5525728250
3:什么是錨點(diǎn),以下是官網(wǎng)游戲示例中對錨點(diǎn)的簡單描述
接下來我們要對主角的屬性進(jìn)行一些設(shè)置,首先是改變 錨點(diǎn)(Anchor) 的位置。默認(rèn)狀態(tài)下,任何節(jié)點(diǎn)的錨點(diǎn)都會在節(jié)點(diǎn)的中心,也就是說該節(jié)點(diǎn)中心點(diǎn)所在的位置就是該節(jié)點(diǎn)的位置。我們希望控制主角的底部的位置來模擬在地面上跳躍的效果,所以現(xiàn)在我們需要把主角的錨點(diǎn)設(shè)置在腳下。在 屬性檢查器 里找到 Anchor 屬性,把其中的 y 值設(shè)為 0,可以看到 場景編輯器 中,表示主角位置的 移動工具 的箭頭出現(xiàn)在了主角腳下。
注意錨點(diǎn)的取值,當(dāng)錨點(diǎn)的取值為(0,0)時表示錨點(diǎn)在節(jié)點(diǎn)的左下角,錨點(diǎn)的取值為(1,1)時表示錨點(diǎn)在節(jié)點(diǎn)的右上角,錨點(diǎn)的取值為(0.5,0.5)時表示錨點(diǎn)在節(jié)點(diǎn)的中心,以此類推。
4:執(zhí)行一次update函數(shù)就是一幀,update函數(shù)中的函數(shù)體執(zhí)行完之后才會繼續(xù)執(zhí)行下一次的update函數(shù),這也就是說完成了一幀了,當(dāng)前的update的函數(shù)體還沒有執(zhí)行完,那么就不會下一次的update函數(shù),這時就會出現(xiàn)游戲卡頓的現(xiàn)象,也就是執(zhí)行一幀的時間較長了。
5:在腳本文件中寫完某個包含動作的函數(shù)后,必須調(diào)用this.node.runAction()方法才能讓節(jié)點(diǎn)運(yùn)動起來。
6:在js中,如果在某個函數(shù)中有this.accLeft = false這樣類似的聲明,那么accLeft可以在其他函數(shù)中,通過this.accLeft直接來引用,通過this相當(dāng)于把a(bǔ)ccLeft聲明為成員變量了,所以可以在其他函數(shù)中直接進(jìn)行引用。
7:在函數(shù)的參數(shù)定義中,如果有target?: any這樣類似的參數(shù),其中?表示該參數(shù)可有可無。
8:注意腳本文件中,如果你按住ctrl+鼠標(biāo)左鍵如果跳轉(zhuǎn)到類或者是函數(shù)的定義處(即creator.d.ts文件中)的話,一般是寫錯了。
9:一個腳本中的this.變量(相當(dāng)于public的成員變量),可以在另外一個腳本中直接使用,前提是先獲取到腳本的實(shí)例。
10:組件腳本中屬性的常用字段如下:
default:設(shè)置屬性的默認(rèn)值,這個默認(rèn)值僅在組件第一次添加到節(jié)點(diǎn)上時才會用到
type:限定屬性的數(shù)據(jù)類型
visible:設(shè)為 false 則不在屬性檢查器面板中顯示該屬性
serializable: 設(shè)為 false 則不序列化(保存)該屬性
displayName:在屬性檢查器面板中顯示成指定名字
tooltip:在屬性檢查器面板中添加屬性的 tooltip
11:子節(jié)點(diǎn)的position是子節(jié)點(diǎn)的錨點(diǎn)以父節(jié)點(diǎn)的錨點(diǎn)為原點(diǎn)(0,0)得到的一組x,y
12:官方總結(jié)的注意點(diǎn):
這里需要注意幾個問題:
1:節(jié)點(diǎn)下的 y 屬性對應(yīng)的是錨點(diǎn)所在的 y 坐標(biāo),因?yàn)殄^點(diǎn)默認(rèn)在節(jié)點(diǎn)的中心,所以需要加上地面高度的一半才是地面的 y 坐標(biāo)
2:instantiate 方法的作用是:克隆指定的任意類型的對象,或者從 Prefab 實(shí)例化出新節(jié)點(diǎn),返回值為Node或者Object
3:Node下的addChild方法作用是將新節(jié)點(diǎn)建立在該節(jié)點(diǎn)的下一級,所以新節(jié)點(diǎn)的顯示效果在該節(jié)點(diǎn)之上
4:Node下的setPosition方法 作用是設(shè)置節(jié)點(diǎn)在父節(jié)點(diǎn)坐標(biāo)系中的位置,可以通過兩種方式設(shè)置坐標(biāo)點(diǎn)。一是傳入兩個數(shù)值 x 和 y,二是傳入 cc.v2(x, y)(類型為 cc.Vec2 的對象)
5:通過Node下的getComponent方法可以得到該節(jié)點(diǎn)上掛載的組件引用
13:Sprite 組件的作用:渲染圖片。
14:修改父節(jié)點(diǎn)的Opacity不透明度屬性還會作用于子節(jié)點(diǎn)。
15:Cocos Creator 中的 節(jié)點(diǎn)(Node) 之間可以有父子關(guān)系的層級結(jié)構(gòu),我們修改節(jié)點(diǎn)的 位置(Position) 屬性設(shè)定的節(jié)點(diǎn)位置是該節(jié)點(diǎn)相對于父節(jié)點(diǎn)的 本地坐標(biāo)系 而非世界坐標(biāo)系。最后在繪制整個場景時 Cocos Creator 會把這些節(jié)點(diǎn)的本地坐標(biāo)映射成世界坐標(biāo)系坐標(biāo)。
16:錨點(diǎn)由 anchorX 和 anchorY 兩個值表示,他們是通過節(jié)點(diǎn)尺寸計(jì)算錨點(diǎn)位置的乘數(shù)因子,范圍都是 0 ~ 1 之間。(0.5, 0.5) 表示錨點(diǎn)位于節(jié)點(diǎn)長度乘 0.5 和寬度乘 0.5 的地方,即節(jié)點(diǎn)的中心。錨點(diǎn)屬性設(shè)為 (0, 0) 時,錨點(diǎn)位于節(jié)點(diǎn)本地坐標(biāo)系的初始原點(diǎn)位置,也就是節(jié)點(diǎn)約束框的左下角。當(dāng)父節(jié)點(diǎn)的錨點(diǎn)位置確定后,所有子節(jié)點(diǎn)就會以父節(jié)點(diǎn)的錨點(diǎn)所在位置作為坐標(biāo)系原點(diǎn),不管有多少級節(jié)點(diǎn),都繼續(xù)按照層級高低依次處理,每個節(jié)點(diǎn)都使用父節(jié)點(diǎn)的坐標(biāo)系和自身位置錨點(diǎn)屬性來確定在場景空間中的位置。最外層的父節(jié)點(diǎn)的坐標(biāo)是參考場景編輯器背景的刻度,世界坐標(biāo)系的原點(diǎn)是屏幕左下角,也就是刻度的0,0點(diǎn)。
17:旋轉(zhuǎn)的角度值為正時,節(jié)點(diǎn)順時針旋轉(zhuǎn),角度值為負(fù)時,節(jié)點(diǎn)逆時針旋轉(zhuǎn),父節(jié)點(diǎn)旋轉(zhuǎn)影響子節(jié)點(diǎn),父節(jié)點(diǎn)縮放也影響子節(jié)點(diǎn)。
18:除了有具體圖像渲染任務(wù)的節(jié)點(diǎn)之外,我們還會有一部分節(jié)點(diǎn)只負(fù)責(zé)掛載腳本,執(zhí)行邏輯,不包含任何渲染相關(guān)內(nèi)容。通常我們將這些節(jié)點(diǎn)放置在場景根層級,和 Canvas 節(jié)點(diǎn)并列。
19:以下代碼用 cc.Class 創(chuàng)建了一個類型,并且賦給了 Sprite 變量。同時還將類名設(shè)為 "sprite",類名用于序列化,一般可以省略。
var Sprite = cc.Class({
name: "sprite"
});
20:如下寫法學(xué)習(xí)下:
var CeShi = cc.Class({
extends: cc.Component,
ctor: function () {
},
putongmethod: function () {
}
})
var C = new CeShi()
21:簡單聲明如下所示:
a:1,// number
b:"zifuchuang",// string
c:false,// boolean
d:null,// object
e:cc.Vec2,//當(dāng)聲明的屬性具備類型時(如:cc.Node,cc.Vec2 等),可以在聲明處填寫他們的構(gòu)造函數(shù)來完成聲明
f:new cc.Vec2(5,3),//當(dāng)聲明屬性的類型繼承自 cc.ValueType 時(如:cc.Vec2,cc.Color 或 cc.Rect),除了上面的構(gòu)造函數(shù),還可以直接使用實(shí)例作為默認(rèn)值
g:[],// 不定義具體類型的數(shù)組
h:[cc.Integer],//當(dāng)聲明屬性是一個數(shù)組時,可以在聲明處填寫他們的類型或構(gòu)造函數(shù)來完成聲明
除了以上幾種,其他的數(shù)據(jù)類型都要完整聲明,當(dāng)然后以上幾種也可以寫成完整聲明的形式。
完整聲明如下所示:
score: {
default: 0,
displayName: "Score (player)",
tooltip: "The score of player",
}
數(shù)組的完整聲明如下所示:
names: {
default: [],
type: [cc.String] // 用 type 指定數(shù)組的每個元素都是字符串類型
},
下面是常用參數(shù):
default: 設(shè)置屬性的默認(rèn)值,這個默認(rèn)值僅在組件第一次添加到節(jié)點(diǎn)上時才會用到
type: 限定屬性的數(shù)據(jù)類型,詳見 CCClass 進(jìn)階參考:type 參數(shù)
visible: 設(shè)為 false 則不在 屬性檢查器 面板中顯示該屬性
serializable: 設(shè)為 false 則不序列化(保存)該屬性
displayName: 在 屬性檢查器 面板中顯示成指定名字
tooltip: 在 屬性檢查器 面板中添加屬性的 Tooltip
22:聲明周期函數(shù)的執(zhí)行順序:onLoad->start->update->lateUpdate->update->lateUpdate->...
23:var聲明的是局部變量,代碼如下所示:
start: function () {
var scene = cc.director.getScene();
var node = cc.instantiate(this.target);
node.parent = scene;
node.setPosition(0, 0);
},
24:動態(tài)加載資源要注意兩點(diǎn):一是所有需要通過腳本動態(tài)加載的資源,都必須放置在 resources 文件夾或它的子文件夾下;二是resources 需要在 assets 文件夾中手工創(chuàng)建,并且必須位于 assets 的根目錄。注意:如果一份資源不需要由腳本 直接 動態(tài)加載,那么千萬不要放在 resources 文件夾里。
25:Creator 提供了 cc.loader.loadRes 這個 API 來專門加載那些位于 resources 目錄下的 Asset。loadRes一次只能加載單個 Asset。調(diào)用時,你只要傳入相對 resources 的路徑即可,并且路徑的結(jié)尾處不能包含文件擴(kuò)展名。
26:資源釋放:loadRes 加載進(jìn)來的單個資源如果需要釋放,可以調(diào)用 cc.loader.releaseRes,releaseRes 可以傳入和 loadRes 相同的路徑和類型參數(shù)。此外,你也可以使用 cc.loader.releaseAsset 來釋放特定的 Asset 實(shí)例。比如:cc.loader.releaseAsset(spriteFrame);
27:資源批量加載:cc.loader.loadResDir 可以加載相同路徑下的多個資源。
28:派送事件:this.node.dispatchEvent 方法,通過該方法發(fā)射的事件,會進(jìn)入事件派送階段,采用冒泡派送的方式。冒泡派送會將事件從事件發(fā)起節(jié)點(diǎn),不斷地向上傳遞給他的父級節(jié)點(diǎn),直到到達(dá)根節(jié)點(diǎn)或者在某個節(jié)點(diǎn)的響應(yīng)函數(shù)中做了中斷處理 event.stopPropagation()。
29:事件對象
在事件監(jiān)聽回調(diào)中,開發(fā)者會接收到一個 cc.Event 類型的事件對象 event,stopPropagation 就是 cc.Event 的標(biāo)準(zhǔn) API,其它重要的 API 包含:
API 名 類型 意義
type String 事件的類型(事件名)
target cc.Node 接收到事件的原始對象
currentTarget cc.Node 接收到事件的當(dāng)前對象,事件在冒泡階段當(dāng)前對象可能與原始對象不同
getType Funciton 獲取事件的類型
stopPropagation Function 停止冒泡階段,事件將不會繼續(xù)向父節(jié)點(diǎn)傳遞,當(dāng)前節(jié)點(diǎn)的剩余監(jiān)聽器仍然會接收到事件
stopPropagationImmediate Function 立即停止事件的傳遞,事件將不會傳給父節(jié)點(diǎn)以及當(dāng)前節(jié)點(diǎn)的剩余監(jiān)聽器
getCurrentTarget Function 獲取當(dāng)前接收到事件的目標(biāo)節(jié)點(diǎn)
detail Function 自定義事件的信息(屬于 cc.Event.EventCustom)
setUserData Function 設(shè)置自定義事件的信息(屬于 cc.Event.EventCustom)
getUserData Function 獲取自定義事件的信息(屬于 cc.Event.EventCustom)
30:鼠標(biāo)事件類型和事件對象
鼠標(biāo)事件在桌面平臺才會觸發(fā),系統(tǒng)提供的事件類型如下:
枚舉對象定義 對應(yīng)的事件名 事件觸發(fā)的時機(jī)
cc.Node.EventType.MOUSE_DOWN 'mousedown' 當(dāng)鼠標(biāo)在目標(biāo)節(jié)點(diǎn)區(qū)域按下時觸發(fā)一次
cc.Node.EventType.MOUSE_ENTER 'mouseenter' 當(dāng)鼠標(biāo)移入目標(biāo)節(jié)點(diǎn)區(qū)域時,不論是否按下
cc.Node.EventType.MOUSE_MOVE 'mousemove' 當(dāng)鼠標(biāo)在目標(biāo)節(jié)點(diǎn)在目標(biāo)節(jié)點(diǎn)區(qū)域中移動時,不論是否按下
cc.Node.EventType.MOUSE_LEAVE 'mouseleave' 當(dāng)鼠標(biāo)移出目標(biāo)節(jié)點(diǎn)區(qū)域時,不論是否按下
cc.Node.EventType.MOUSE_UP 'mouseup' 當(dāng)鼠標(biāo)從按下狀態(tài)松開時觸發(fā)一次
cc.Node.EventType.MOUSE_WHEEL 'mousewheel' 當(dāng)鼠標(biāo)滾輪滾動時
鼠標(biāo)事件(cc.Event.EventMouse)的重要 API 如下(cc.Event 標(biāo)準(zhǔn)事件 API 之外):
函數(shù)名 返回值類型 意義
getScrollY Number 獲取滾輪滾動的 Y 軸距離,只有滾動時才有效
getLocation Object 獲取鼠標(biāo)位置對象,對象包含 x 和 y 屬性
getLocationX Number 獲取鼠標(biāo)的 X 軸位置
getLocationY Number 獲取鼠標(biāo)的 Y 軸位置
getPreviousLocation Object 獲取鼠標(biāo)事件上次觸發(fā)時的位置對象,對象包含 x 和 y 屬性
getDelta Object 獲取鼠標(biāo)距離上一次事件移動的距離對象,對象包含 x 和 y 屬性
getButton Number cc.Event.EventMouse.BUTTON_LEFT 或 cc.Event.EventMouse.BUTTON_RIGHT 或 cc.Event.EventMouse.BUTTON_MIDDLE
31:觸摸事件類型和事件對象
觸摸事件在移動平臺和桌面平臺都會觸發(fā),這樣做的目的是為了更好得服務(wù)開發(fā)者在桌面平臺調(diào)試,只需要監(jiān)聽觸摸事件即可同時響應(yīng)移動平臺的觸摸事件和桌面端的鼠標(biāo)事件。系統(tǒng)提供的觸摸事件類型如下:
枚舉對象定義 對應(yīng)的事件名 事件觸發(fā)的時機(jī)
cc.Node.EventType.TOUCH_START 'touchstart' 當(dāng)手指觸點(diǎn)落在目標(biāo)節(jié)點(diǎn)區(qū)域內(nèi)時
cc.Node.EventType.TOUCH_MOVE 'touchmove' 當(dāng)手指在屏幕上目標(biāo)節(jié)點(diǎn)區(qū)域內(nèi)移動時
cc.Node.EventType.TOUCH_END 'touchend' 當(dāng)手指在目標(biāo)節(jié)點(diǎn)區(qū)域內(nèi)離開屏幕時
cc.Node.EventType.TOUCH_CANCEL 'touchcancel' 當(dāng)手指在目標(biāo)節(jié)點(diǎn)區(qū)域外離開屏幕時
觸摸事件(cc.Event.EventTouch)的重要 API 如下(cc.Event 標(biāo)準(zhǔn)事件 API 之外):
API 名 類型 意義
touch cc.Touch 與當(dāng)前事件關(guān)聯(lián)的觸點(diǎn)對象
getID Number 獲取觸點(diǎn)的 ID,用于多點(diǎn)觸摸的邏輯判斷
getLocation Object 獲取觸點(diǎn)位置對象,對象包含 x 和 y 屬性
getLocationX Number 獲取觸點(diǎn)的 X 軸位置
getLocationY Number 獲取觸點(diǎn)的 Y 軸位置
getPreviousLocation Object 獲取觸點(diǎn)上一次觸發(fā)事件時的位置對象,對象包含 x 和 y 屬性
getStartLocation Object 獲取觸點(diǎn)初始時的位置對象,對象包含 x 和 y 屬性
getDelta Object 獲取觸點(diǎn)距離上一次事件移動的距離對象,對象包含 x 和 y 屬性
需要注意的是,觸摸事件支持多點(diǎn)觸摸,每個觸點(diǎn)都會發(fā)送一次事件給事件監(jiān)聽器。
32:cc.Node 的其它事件
枚舉對象定義 對應(yīng)的事件名 事件觸發(fā)的時機(jī)
無 'position-changed' 當(dāng)位置屬性修改時
無 'rotation-changed' 當(dāng)旋轉(zhuǎn)屬性修改時
無 'scale-changed' 當(dāng)縮放屬性修改時
無 'size-changed' 當(dāng)寬高屬性修改時
無 'anchor-changed' 當(dāng)錨點(diǎn)屬性修改時
33:require 返回的就是被模塊導(dǎo)出的對象,通常我們都會將結(jié)果立即存到一個變量(var Rotate)。傳入 require 的字符串就是模塊的文件名,這個名字不包含路徑也不包含后綴,而且大小寫敏感。
34:module.exports 的默認(rèn)值:
當(dāng)你的 module.exports 沒有任何定義時,Creator 會自動優(yōu)先將 exports 設(shè)置為腳本中定義的 Component。如果腳本沒定義 Component 但是定義了別的類型的 CCClass,則自動把 exports 設(shè)為定義的 CCClass。如果只是普通的js腳本文件,沒有繼承任何CCClass,那么就需要用exports來設(shè)置要導(dǎo)出的數(shù)據(jù)了。module.exports 默認(rèn)是一個空對象({}),可以直接往里面增加新的字段,有兩種寫法,如下所示:
第一種寫法:
module.exports.foo = function () {
cc.log("foo");
};
第二種寫法:
module.exports = {
FOO: function () {
this.type = "foo";
},
bar: "bar"
};
35:以下這種寫法學(xué)習(xí)一下:
applyOperation = function (f, a) {
return f(a);
}
applyOperation(
function(a){
return a*a;
},
10
) // 100
36:this 的值到底是什么?
參考網(wǎng)址:https://zhuanlan.zhihu.com/p/23804247
37:靜態(tài)變量或靜態(tài)方法可以在原型對象的 statics 中聲明:
代碼如下:
var Sprite = cc.Class({
statics: {
// 聲明靜態(tài)變量
count: 0,
// 聲明靜態(tài)方法
getBounds: function (spriteList) {
// ...
}
}
});
38:屬性(properties)不用在構(gòu)造函數(shù)里定義,在構(gòu)造函數(shù)被調(diào)用前,屬性已經(jīng)被賦為默認(rèn)值了,可以在構(gòu)造函數(shù)內(nèi)訪問到。如果屬性的默認(rèn)值無法在定義 CCClass 時提供,需要在運(yùn)行時才能獲得,你也可以在構(gòu)造函數(shù)中重新給屬性賦默認(rèn)值。
39:visible 參數(shù)
默認(rèn)情況下,是否顯示在 屬性檢查器 取決于屬性名是否以下劃線 _ 開頭。如果以下劃線開頭,則默認(rèn)不顯示在 屬性檢查器,否則默認(rèn)顯示。
如果要強(qiáng)制顯示在 屬性檢查器,可以設(shè)置 visible 參數(shù)為 true:
properties: {
_id: { // 下劃線開頭原本會隱藏
default: 0,
visible: true
}
}
如果要強(qiáng)制隱藏,可以設(shè)置 visible 參數(shù)為 false:
properties: {
id: { // 非下劃線開頭原本會顯示
default: 0,
visible: false
}
}
40:serializable 參數(shù)
指定了 default 默認(rèn)值的屬性默認(rèn)情況下都會被序列化,序列化后就會將編輯器中設(shè)置好的值保存到場景等資源文件中,并且在加載場景時自動還原之前設(shè)置好的值。如果不想序列化,可以設(shè)置serializable: false。
temp_url: {
default: "",
serializable: false
}
41:override 參數(shù)
所有屬性都將被子類繼承,如果子類要覆蓋父類同名屬性,需要顯式設(shè)置 override 參數(shù),否則會有重名警告。
42:節(jié)點(diǎn)上各種組件的作用:
42.1:sprite組件用來展示圖片;
42.2:label組件用來展示文本;
42.3:mask組件用來設(shè)置遮罩;
42.4:motionstreak組件用來給節(jié)點(diǎn)設(shè)置運(yùn)動條紋;
42.5:particlesystem組件用來給節(jié)點(diǎn)設(shè)置例子系統(tǒng);
42.6:widget組件是用來設(shè)置節(jié)點(diǎn)的位置的,相當(dāng)于Android中的margin屬性,Widget 默認(rèn)的對齊參照物是父節(jié)點(diǎn),注意,由于 Canvas 節(jié)點(diǎn)本身就有保持和屏幕大小一致的功能,因此不需要在 Canvas 上添加 Widget 組件,Widget 組件上開啟某個方向的對齊之后,除了指定以像素為單位的邊距以外,我們還可以輸入百分比數(shù)值;
42.7:Layout(自動布局)組件可以掛載在任何節(jié)點(diǎn)上,將節(jié)點(diǎn)變成一個有自動布局功能的容器。所謂自動布局容器,就是能夠自動將子節(jié)點(diǎn)按照一定規(guī)律排列,并可以根據(jù)節(jié)點(diǎn)內(nèi)容的約束框總和調(diào)整自身尺寸的容器型節(jié)點(diǎn);
cocos的api總結(jié):
this.node.runAction()//讓節(jié)點(diǎn)執(zhí)行某個動作
this.node.addChild()//給當(dāng)前節(jié)點(diǎn)添加子節(jié)點(diǎn)
this.node.x//當(dāng)前節(jié)點(diǎn)的x坐標(biāo)
this.node.width//當(dāng)前節(jié)點(diǎn)的寬度
this.node.position//當(dāng)前節(jié)點(diǎn)的位置,如this.node.position = cc.v2(100, 50),求當(dāng)前節(jié)點(diǎn)的位置到另外一個節(jié)點(diǎn)的位置之間的距離this.node.position.sub(另外一個節(jié)點(diǎn)的坐標(biāo)).mag()
this.node.setPosition(100, 50)//設(shè)置當(dāng)前節(jié)點(diǎn)的position屬性
this.node.rotation= 90;//更改節(jié)點(diǎn)旋轉(zhuǎn)
this.node.setRotation(90)//更改節(jié)點(diǎn)旋轉(zhuǎn)
this.node.scaleX = 2;//更改節(jié)點(diǎn)縮放
this.node.scaleY = 2;
this.node.setScale(2);//setScale 傳入單個參數(shù)時,會同時修改 scaleX 和 scaleY。
this.node.setScale(2, 2);
this.node.setContentSize(100, 100);//更改節(jié)點(diǎn)尺寸
this.node.setContentSize(cc.size(100, 100));
this.node.width = 100;
this.node.height = 100;
this.node.anchorX = 1;//更改節(jié)點(diǎn)錨點(diǎn)位置
this.node.anchorY = 0;
this.node.setAnchorPoint(1, 0);
this.node.color = cc.Color.RED;//設(shè)置當(dāng)前節(jié)點(diǎn)的顏色
this.node.opacity//當(dāng)前節(jié)點(diǎn)的透明度
this.node.children//得到該節(jié)點(diǎn)下的所有子節(jié)點(diǎn),注意該api只會返回節(jié)點(diǎn)的直接子節(jié)點(diǎn),不會返回子節(jié)點(diǎn)的子節(jié)點(diǎn)
this.node.childrenCount//將返回節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)量,注意該api只會返回節(jié)點(diǎn)的直接子節(jié)點(diǎn),不會返回子節(jié)點(diǎn)的子節(jié)點(diǎn)
this.node.getChildByName("...")//根據(jù)名字得到該節(jié)點(diǎn)下的某個子節(jié)點(diǎn)
this.node.active//設(shè)置節(jié)點(diǎn)的激活狀態(tài),默認(rèn)是激活的
this.node.activeInHierarchy//查看當(dāng)前節(jié)點(diǎn)是否激活
this.node.parent//給當(dāng)前節(jié)點(diǎn)設(shè)置父節(jié)點(diǎn)
this.node.on()//給節(jié)點(diǎn)設(shè)置監(jiān)聽事件
this.node.once()//在監(jiān)聽函數(shù)響應(yīng)后就會關(guān)閉監(jiān)聽事件
this.node.off()//關(guān)閉監(jiān)聽,off 方法的參數(shù)必須和 on 方法的參數(shù)一一對應(yīng),才能完成關(guān)閉。
this.node.emit()//發(fā)射事件
this.node.dispatchEvent()//發(fā)射事件,兩者的區(qū)別在于,后者可以做事件傳遞。
this.node.destroy()//銷毀某個節(jié)點(diǎn)
Node類型.setPosition()//給某個節(jié)點(diǎn)設(shè)置位置
Node類型.getPosition()//獲取某個節(jié)點(diǎn)的位置
Node類型.addComponent()//給一個節(jié)點(diǎn)添加組件
Node類型.getComponent(組件名)//得到節(jié)點(diǎn)上的某個組件,然后可以通過.屬性名來得到組件上的某個屬性值,如this.player.getComponent('Player').jumpHeight,當(dāng)獲取某個實(shí)際并不存在的屬性時,系統(tǒng)會臨時創(chuàng)建該屬性。
Node類型.stopAction()//停止一個動作
Node類型.stopAllActions()//停止某個節(jié)點(diǎn)的所有動作
Node類型.getActionByTag()//通過 tag 獲取 action
Node類型.stopActionByTag()//通過 tag 停止一個動作
Action類型.setTag()//給 action 設(shè)置 tag
Action類型.easing(cc.easeIn(3.0));//給基礎(chǔ)動作設(shè)置緩動動作,緩動動作不可以單獨(dú)存在,它永遠(yuǎn)是為了修飾基礎(chǔ)動作而存在的,它可以用來修改基礎(chǔ)動作的時間曲線,讓動作有快入、緩入、快出或其它更復(fù)雜的特效。需要注意的是,只有時間間隔動作才支持緩動。
具體的動作列表請查看:https://docs.cocos.com/creator/manual/zh/scripting/action-list.html
cc.moveBy()//移動到某個位置,相對移動
cc.moveTo(2, 100, 100)//移動到某個位置,絕對移動
cc.rotateBy() 用來旋轉(zhuǎn)節(jié)點(diǎn)一定的角度;
cc.scaleTo() 用來縮放節(jié)點(diǎn)
cc.repeat()//用來多次重復(fù)一個動作,重復(fù)的次數(shù)由方法的第二個參數(shù)設(shè)定。
cc.repeatForever()//永遠(yuǎn)重復(fù)執(zhí)行某一個動作,直到手動停止
cc.speed()//可以改變目標(biāo)動作的執(zhí)行速率,讓動作更快或者更慢完成。
cc.delayTime()//給動作延遲一段時間
cc.audioEngine.playEffect()//播放某個音效
cc.callFunc()//執(zhí)行某個回調(diào)函數(shù),使用callFunc調(diào)用回調(diào)函數(shù)可以讓函數(shù)轉(zhuǎn)變?yōu)?cc 中的 Action(動作),這一用法在 cc 的動作系統(tǒng)里非常實(shí)用!注意: 在 cc.callFunc 中不應(yīng)該停止自身動作,由于動作是不能被立即刪除,如果在動作回調(diào)中暫停自身動作會引發(fā)一系列遍歷問題,導(dǎo)致更嚴(yán)重的 bug。
cc.sequence()//順序執(zhí)行動作,將多個動作組合起來
cc.spawn()//同時執(zhí)行多個動作
cc.macro.KEY.a//鍵盤上的A鍵
cc.macro.KEY.d//鍵盤上的D鍵
cc.Node.EventType.MOUSE_DOWN//鼠標(biāo)按下的枚舉值
cc.systemEvent.on()//監(jiān)聽用戶輸入,如監(jiān)聽鍵盤輸入
cc.systemEvent.off()//取消監(jiān)聽用戶輸入
cc.SystemEvent.EventType.KEY_DOWN//按下鍵盤的事件類型
cc.SystemEvent.EventType.KEY_UP//松開鍵盤的事件類型
cc.SystemEvent.EventType.DEVICEMOTION//設(shè)備重力傳感
cc.instantiate()//克隆指定的任意類型的對象或者從 Prefab 實(shí)例化出新節(jié)點(diǎn)
cc.v2()//返回一個向量,說白了就是一組x,y
cc.director.preloadScene("MyScene")//對場景進(jìn)行預(yù)加載
cc.director.loadScene("MyScene")//通過場景名稱進(jìn)行加載場景。
cc.find("Cannon 01/Barrel/SFX", this.node);如果子節(jié)點(diǎn)的層次較深,還可以使用 cc.find,cc.find 將根據(jù)傳入的路徑進(jìn)行逐級查找子節(jié)點(diǎn)。當(dāng) cc.find 只傳入第一個參數(shù)時,將從場景根節(jié)點(diǎn)開始逐級查找,比如this.backNode = cc.find("Canvas/Menu/Back");
cc.director.getScene()//得到場景根節(jié)點(diǎn)
cc.isValid()//判斷當(dāng)點(diǎn)是否被銷毀
cc.game.addPersistRootNode(myNode);//將節(jié)點(diǎn)標(biāo)注為常駐節(jié)點(diǎn)
cc.game.removePersistRootNode(myNode);//取消一個節(jié)點(diǎn)的常駐屬性,注意該api并不會立即銷毀指定節(jié)點(diǎn),只是將節(jié)點(diǎn)還原為可在場景切換時銷毀的節(jié)點(diǎn)
cc.loader.loadRes("test assets/prefab")//加載resources文件夾下的資源,比如加載Prefab
cc.loader.releaseRes()//資源釋放
cc.loader.releaseAsset()//釋放特定的 Asset 實(shí)例
cc.loader.loadResDir//資源批量加載
cc.loader.load()//加載遠(yuǎn)程資源,loadRes 等 API 只適用于應(yīng)用包內(nèi)的資源和熱更新的本地資源
cc.isChildClassOf()//來判斷兩個類的繼承關(guān)系
cc.Camera.findCamera()//獲取節(jié)點(diǎn)所在的第一個攝像機(jī)
Camera類型.containsNode()//檢測節(jié)點(diǎn)是否被此攝像機(jī)影響。
Camera類型.render()//可以調(diào)用這個方法來手動渲染攝像機(jī),比如截圖的時候。
Camera類型.getCameraToWorldPoint(point, out);// 將一個攝像機(jī)坐標(biāo)系下的點(diǎn)轉(zhuǎn)換到世界坐標(biāo)系下
Camera類型.getWorldToCameraPoint(point, out);// 將一個世界坐標(biāo)系下的點(diǎn)轉(zhuǎn)換到攝像機(jī)坐標(biāo)系下
Camera類型.getCameraToWorldMatrix(out);// 獲取攝像機(jī)坐標(biāo)系到世界坐標(biāo)系的矩陣
Camera類型.getWorldToCameraMatrix(out);// 獲取世界坐標(biāo)系到攝像機(jī)坐標(biāo)系的矩陣
Component類型.setTimeout()//設(shè)置延時執(zhí)行的代碼,比如:setTimeout(function () {this.target.destroy();}.bind(this), 5000);
Component類型.setInterval()//設(shè)置延時執(zhí)行的代碼
Component類型.schedule()//開始一個計(jì)時器
Component類型.scheduleOnce()//開始一個只執(zhí)行一次的計(jì)時器
Component類型.unschedule()//取消一個計(jì)時器
Component類型.unscheduleAllCallbacks()//取消這個組件的所有計(jì)時器,注意:cc.Node 不包含計(jì)時器相關(guān) API,計(jì)時器的具體用法,請查看https://docs.cocos.com/creator/manual/zh/scripting/scheduler.html
NodePool類型.put()//向?qū)ο蟪刂蟹湃雽ο?br> NodePool類型.get()//獲得對象池中的對象
NodePool類型.clear()//清空對象池中的對象
NodePool類型.size()//獲取對象池中對象的個數(shù)