cocos-creator 腳本邏輯-1


1.節點

編輯組件的腳本文件時。可以通過以下語句獲得節點

this 就是當前組件

this.node

拿到組件依附的節點 

 

This.node.parent

拿到組件依附的節點 的父節點

 

This.node.children

拿到組件依附的節點 的子節點

 

this.node.getChildByName(‘’)

通過名稱取得特定名的直系子節點

 

cc.removeSelf() 

從節點樹刪除該節點 留在內存,但已經不在節點中 如果 args = true 則消失

 

跨直系引用節點

在properties 中聲明 node 對象再在編輯器中拖拽綁定

就可以在組建內部直接引用

兩個屬性

默認組件名樣式 name:節點<組件>

isValid 組件是否還在活動

 

2.動作

所有的動作 api 是由節點提供的,所以我們要先拿到節點

如 node.runAction()

 

1)動作運行:

runAction('action') 開始一個動作

stopAction(‘action’) 停止一個動作

stopAllAction() 停止該節點下的所有動作

 

2) 設置tag

action.setTag('tag_name')

node.getActionByTag('tag_name')

 

3)移動

cc.moveTo(1,20,20) 用 1s 以父節點錨點為坐標中心移動到(20,20)的位置

可以移動到一個點的相對位置,比如可以換成 cc.v2(100,100) 以c2為坐標的(100,100)

cc.rotateTo(1,50) 1s 第二個參數是角度

cc.moveBy() 相對移動

cc.scaleTo(1,2,2) 1s 放大到 2,2 scale

cc.fadeOut(1) 1s 消失

 

4)動作包裝

包裝為一個動作

cc.sequence(

動作1,

動作2

)

 

5)容器動作

順序動作:cc.sequence

可執行來回往復運動,如:

var seq = cc.sequence(cc.moveBy(0.5, 200, 0), cc.moveBy(0.5, -200, 0));

node.runAction(seq);//左右來回移動

 

同步動作:cc.spawn

可執行疊加系列動作,如:

var spawn = cc.spawn(cc.moveBy(0.5, 0, 50), cc.scaleTo(0.5, 0.8, 1.4));

node.runAction(spawn);//向上同時縮放

 

重復動作:cc.repeat

可執行重復一個動作,如:

var seq = cc.repeat( cc.sequence( cc.moveBy(2, 200, 0), cc.moveBy(2, -200, 0) ), 5); node.runAction(seq);//左右移動,重復5次


永遠重復動作:cc.repeatForever
可執行一直重復動作,如:
 var seq = cc.repeatForever( cc.sequence( cc.moveBy(2, 200, 0), cc.moveBy(2, -200, 0) ));//一直重復左右移動


改變速度:cc.speed
可執行改變速率,如:
var action = cc.speed( cc.spawn( cc.moveBy(2, 0, 50), cc.scaleTo(2, 0.8, 1.4) ), 0.5); node.runAction(action);//速度加快一倍,2秒變1秒
 
 

 

3.回調函數 callFunc

cc.callFunc(this.callBack, this, {'args':args}) 函數,對象,參數

callBack :function(targetNode, args){}

 

4.事件/交互內容

添加 Label 內置組件來添加名稱,方便於判斷

在操作過程中記得返回編輯器拖拽補充引用。

 

emit 和 on 配套 發射和監聽

This.node.emit(”事件“,{參數}); 發生“事件” 同時給出參數

this.node.on(”事件“,this.event1, this.node1) 發生了“事件”后 執行 event1 執行對象是這個 node

this.node.on(”事件“,this.event2,this.node2)

限制:(參數必須和 on 一致 )

this.node.once() 只監聽聽一次 

this.node.off() 不再監聽 on 

實例:

這里的 this 指的是 node1

  1.  
    event1: function(e){
  2.  
    console.log(e.detail),
  3.  
    this.runAction(cc.moveTo(1,200,0))
  4.  
    },

 

5 觸摸事件 鼠標事件 鍵盤事件

1)觸摸(因為用的比較多這個寫完整,其它都只寫一個)

This.node.on(‘touchStart’,this.onTouchStart, this) 開始觸摸

this.node.on(‘touchmove’,this.onTouchMove,this); 觸摸移動,持續觸發

this.node.on(‘touchEnd’,this.onTouchEnd, this) 觸摸停止

this.node.on(‘touchCancel’, this.onTouchCancel, this) 觸摸取消,(節點外釋放)

 

This.node.on(‘mouseup’,this.onMouseUp,this)  鼠標脫離

mouseDown onMouseDown 鼠標按下 

mouseMove onMouseMove 鼠標移動(不一定要點擊)

mouseEnter onMouseEnter 鼠標進入節點區域

mouserLeave onMouseLeave 鼠標離開節點區域

mouseWheel onMouseWheel 鼠標滾輪

獲取點擊

getButton() 返回 0 1 2 對應 左中右

 

2)鍵盤事件 

cc.systemEvent.on(type,callback,target)

返回一個 keycode 

可選的 type 類型有:

  1. cc.SystemEvent.EventType.KEY_DOWN (鍵盤按下)
  2. cc.SystemEvent.EventType.KEY_UP (鍵盤釋放)
  3. cc.SystemEvent.EventType.DEVICEMOTION (設備重力傳感)

例如

cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);

If e.keyCode == cc.KEY.w 當 keycode 是 w 時

cc.KEY.(按鍵)

 

3)獲取坐標

getLocation() 獲取全局坐標下的圓心

例子:

onTouchStart: function(e){

    E.getLocation() 

}

坐標轉換:從全局坐標系轉到本地坐標系

let locationOfThisNode = this.node.convertToNodeSpaceAR(e.getLocation()) AR 忽略錨點 this.node目標坐標系對應節點

讓某個節點的坐標更新

this.node.position = locationOfThisNode

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM