CocosCreator動作系統


廢話沒有,直接上代碼,有注釋可以看的,

 

cc.Class({
    extends: cc.Component,

    properties: {
        //1
        player:{
            default:null,
            type:cc.Node,
            tooltip:"this is a tips"//屬性檢查器內的自定義提示信息
        }
    },
 
    onLoad:function(){
        //////////使用動作系統///////////////////////////////////
        //var action1=this.player.moveTo(2,100,100);  cc.
        //this.node.runAction(action1);   error

        //action 1 簡單移動動作
        //var action1=cc.moveTo(2,100,100);
        //this.player.runAction(action1);

        // 2  順序執行的動作
        //var seq0=cc.sequence(cc.moveBy(2,200,0),cc.moveBy(2,-200,0)) ;
        //this.player.runAction(seq0);

        // 3  同步動作   讓節點在向上移動的同時縮放
        //var spawn = cc.spawn(cc.moveBy(0.5, 0, 50), cc.scaleTo(0.5, 0.8, 1.4));
        //this.player.runAction(spawn);

        // 4 重復動作 cc.repeat 重復動作用來多次重復一個動作
        /*
        var seq=cc.repeat(
            cc.sequence(
                cc.moveBy(2,200,0),
                cc.moveBy(2,-200,0)),5 );
        this.player.runAction(seq);  */

        //5 永遠重復 循環
        /*
        var seq0=cc.repeatForever(cc.sequence(cc.moveBy(2,200,0),cc.moveBy(2,-200,0))) ;
        this.player.runAction(seq0);  */

        //6 速度動作
        /*
        var seq1=cc.speed(
            cc.spawn(
                cc.moveBy(2,200,0),
                cc.scaleTo(2, 0.8, 1.4)
            ),0.5 );
            this.player.runAction(seq1);  */
        // 一個復雜的跳躍動畫
         var JumpAction = cc.sequence(
            cc.spawn(
                cc.scaleTo(0.1, 0.8, 1.2),
                cc.moveTo(0.1, 0, 10)
            ),
            cc.spawn(
                cc.scaleTo(0.2, 1, 1),
                cc.moveTo(0.2, 0, 0)
            ),
            cc.delayTime(0.5),
            cc.spawn(
                cc.scaleTo(0.1, 1.2, 0.8),
                cc.moveTo(0.1, 0, -10)
            ),
            cc.spawn(
                cc.scaleTo(0.2, 1, 1),
                cc.moveTo(0.2, 0, 0)
            )
// 以1/2的速度慢放動畫,並重復5次
        ).speed(2).repeat(5);
         this.player.runAction(JumpAction);
    },

    start :function() {
        //獲取組件所在的節點,只要在組件方法里訪問 this.node 變量:
        var node=this.node;
        console.log(node.name+":0000000000000000000000000");
        //獲取其他組件,獲得同一個節點上的其它組件,這就要用到 getComponent 這個 API
        var canvas=this.getComponent(cc.Canvas);//canvas 為object
        var text=canvas.name+":11111111111111111111111111";
        console.log(text);
        //也可以為 getComponent 傳入一個類名
        var label = this.getComponent("cc.Canvas");
        console.log(label.name+":222222222222222222");//輸出結果同上
        //對用戶定義的組件而言,類名就是腳本的文件名,且區分大小寫。
        //在節點上也有一個 getComponent 方法,它們的作用是一樣的:
        cc.log( this.node.getComponent(cc.Label) === this.getComponent(cc.Label) );  // true
         /*如果在節點上找不到你要的組件,getComponent 將返回 null,如果你嘗試訪問 null 的值,
        將會在運行時拋出 "TypeError" 這個錯誤。因此如果你不確定組件是否存在,記得判斷一下:*/
         if(this.node.getComponent(cc.label)){
             console.log("this node had label component");
         }
         else{
             console.log("this node don't have this component");
         }
         ////////////////////////////////////////////////////////////////////////
       //獲得其它節點及其組件
       // 最直接的方式就是在 屬性檢查器 中設置需要的對象。只需要在腳本中聲明對應屬性即可:1
       //接着就可以將層級管理器上的任意一個節點拖到這個 player 控件,即可,之后可以直接在腳本里訪問 player:this.player.xxxx
        ///////////////////////查找子節點/////////////////////////////////////////////////////////////
        //游戲場景中有很多個相同類型的對象,像炮塔、敵人和特效通常都有一個全局的腳本來統一管理。此時不適合使用屬性檢查器一個個關聯到腳本。為了更好地統一管理這些對象,可以統一的父物體下,然后通過父物體來獲得所有的子物體:
        var cannnos=this.node.children;
         for(var i=0;i<cannnos.length;i++)
         {
             console.log(cannnos[i].name);//不包括自身
         }
         //還可以使用 getChildByName:this.node.getChildByName("Cannon 01");
       // console.log(this.node.getChildByName("richtext").name);
        //全局名字查找 當 cc.find 只傳入第一個參數時,將從場景根節點開始逐級查找:
        //this.backNode = cc.find("Canvas/Menu/Back",this.node);
        ////////////////////////訪問已有變量里的值//////////////////////////////////////////////////////////////
    //1,通過全局變量訪問
        /*你應當很謹慎地使用全局變量,當你要用全局變量時,應該很清楚自己在做什么,我們並不推薦濫用全局變量,即使要用也最好保證全局變量只讀。
    讓我們試着定義一個全局對象 window.Global,這個對象里面包含了 backNode 和 backLabel 兩個屬性。
    // Globals.js, this file can have any name
    window.Global = {
    backNode: null,
    backLabel: null,
    };
    由於所有腳本都強制聲明為 "use strict",因此定義全局變量時的 window. 不可省略。
    接着你可以在合適的地方直接訪問並初始化 Global:
    // Back.js
    cc.Class({
    extends: cc.Component,
    onLoad: function () {
        Global.backNode = this.node;
        Global.backLabel = this.getComponent(cc.Label);
    }
    });
    初始化后,你就能在任何地方訪問到 Global 里的值:
    // AnyScript.js
    cc.Class({
    extends: cc.Component,
    // start 會在 onLoad 之后執行,所以這時 Global 已經初始化過了
    start: function () {
        var text = 'Back';
        Global.backLabel.string = text;
    }
});
訪問全局變量時,如果變量未定義將會拋出異常。
添加全局變量時,請小心不要和系統已有的全局變量重名。
你需要小心確保全局變量使用之前都已初始化和賦值。 */
//2,通過模塊訪問
        /*通過模塊訪問
如果你不想用全局變量,你可以使用 require 來實現腳本的跨文件操作,讓我們看個示例:
// Global.js, now the filename matters

module.exports = {
    backNode: null,
    backLabel: null,
};
每個腳本都能用 require + 文件名(不含路徑) 來獲取到對方 exports 的對象。
// Back.js

// this feels more safe since you know where the object comes from
var Global = require("Global");

cc.Class({
    extends: cc.Component,

    onLoad: function () {
        Global.backNode = this.node;
        Global.backLabel = this.getComponent(cc.Label);
    }
});
// AnyScript.js

// this feels more safe since you know where the object comes from
var Global = require("Global");

cc.Class({
    extends: cc.Component,

    // start 會在 onLoad 之后執行,所以這時 Global 已經初始化過了
    start: function () {
        var text = "Back";
        Global.backLabel.string = text;
    }
});*/ 
    }, 
});

 


免責聲明!

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



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