Cocos Creactor 1.9.3 常用api

Cocos引擎的主要類、函數、屬性或常量

cc.sys 系統變量(System variables)
cc.game 是 Game 的實例,用來驅動整個遊戲。
cc.director 一個管理你的遊戲的邏輯流程的單例對象。
cc.p 通過該簡便的函數進行創建 cc.Vec2 對象。
cc.NodePool 節點對象池的構造函數,用於管理節點對象的對象緩存池。新的 NodePool 需要實例化之後才能使用,每種不同的節點對象池需要一個不同的對象池實例,這裏的種類對應於遊戲中的節點設計,一個 prefab 相當於一個種類的節點。

加載或切換場景

cc.director.loadScene('SceneName', callback) // 加載或切換場景
cc.director.preloadScene('SceneName', callback) // 預加載場景
cc.game.addPersistRootNode(myNode) // 增加常駐節點
cc.game.removePersistRootNode(myNode) // 刪除常駐節點

資源加載

// 動態加載預製資源
cc.loader.loadRes("test assets/prefab", (err, prefab) => {
    var newNode = cc.instantiate(prefab);
    cc.director.getScene().addChild(newNode);
});
// 動態加載 SpriteFrame
cc.loader.loadRes("test assets/image", cc.SpriteFrame, (err, spriteFrame) => {
    this.node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
});

cc.url.raw("resources/test assets/image.png") // 返回Raw Asset資源路徑
// 加載 test assets 目錄下所有資源
cc.loader.loadResDir("test assets", (err, assets) => {});
// 加載 sheep.plist 圖集中的所有 SpriteFrame
cc.loader.loadResDir("test assets/sheep", cc.SpriteFrame, (err, assets) => {
    // assets 是一個 SpriteFrame 數組,已經包含了圖集中的所有 SpriteFrame。
    // 而 loadRes('test assets/sheep', cc.SpriteAtlas, function (err, atlas) {...}) 獲得的則是整個 SpriteAtlas 對象。
});

資源釋放

// 在加載完資源之後,所有的資源都會臨時被緩存到 cc.loader中,所有不需要的資源必須釋放掉以減少內存佔用
cc.loader.releaseRes("test assets/image", cc.SpriteFrame);
cc.loader.releaseRes("test assets/anim");
// 釋放spriteFrame實例
cc.loader.releaseAsset(spriteFrame);
// 直接釋放某個貼圖
cc.loader.release(texture);
// 釋放一個 prefab 以及所有它依賴的資源
var deps = cc.loader.getDependsRecursively('prefabs/sample');
cc.loader.release(deps);
// 如果在這個 prefab 中有一些和場景其他部分共享的資源,你不希望它們被釋放,有兩種方法:
// 1. 顯式聲明禁止某個資源的自動釋放
cc.loader.setAutoRelease(texture2d, false);
// 2. 將這個資源從依賴列表中刪除
var deps = cc.loader.getDependsRecursively('prefabs/sample');
var index = deps.indexOf(texture2d._uuid);
if (index !== -1)
    deps.splice(index, 1);
cc.loader.release(deps);

加載遠程資源和設備資源

// 遠程 url 帶圖片後綴名
var remoteUrl = "http://unknown.org/someres.png";
cc.loader.load(remoteUrl, (err, texture) => {
    // Use texture to create sprite frame
});

// 遠程 url 不帶圖片後綴名,此時必須指定遠程圖片文件的類型
remoteUrl = "http://unknown.org/emoji?id=124982374";
cc.loader.load({url: remoteUrl, type: 'png'}, () => {
    // Use texture to create sprite frame
});

// 用絕對路徑加載設備存儲內的資源,比如相冊
var absolutePath = "/dara/data/some/path/to/image.png"
cc.loader.load(absolutePath, () => {
    // Use texture to create sprite frame
});

事件系統

  • 節點系統事件
this.node.on(type, callback, target)
// 示例
this.node.on(cc.Node.EventType.MOUSE_UP, this.startGeme, this); // 監聽
this.node.off(cc.Node.EventType.MOUSE_UP, this.startGeme, this) // 取消監聽
  • 全局系統事件
cc.systemEvent.on(type, callback, target)
// 可選的type類型有:
cc.SystemEvent.EventType.KEY_DOWN (鍵盤按下)
cc.SystemEvent.EventType.KEY_UP (鍵盤釋放)
cc.SystemEvent.EventType.DEVICEMOTION (設備重力傳感)
// 示例
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyboard, this) // 監聽
cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyboard, this) // 取消監聽

動作系統

  • 基礎動作
    • cc.moveTo(duration, x, y) // 移動到指定位置
    • cc.moveBy(duration, x, y) // 移動指定的距離
    • cc.rotateBy // 旋轉節點
    • cc.scaleTo // 縮放節點
    • cc.callFunc // 調用回調函數
    • cc.hide // 隱藏節點
    • cc.fadeOut(opt) // 淡出
      example
// 創建一個移動動作
var action = cc.moveTo(2, 100, 100)
// 執行動作
node.runAction(action)
// 停止一個動作
node.stopAction(action)
// 停止所有動作
node.stopAllActions()

通過tag動作
// 給 action 設置 tag
var ACTION_TAG = 1;
action.setTag(ACTION_TAG);
// 通過 tag 獲取 action
node.getActionByTag(ACTION_TAG);
// 通過 tag 停止一個動作
node.stopActionByTag(ACTION_TAG);

var actionTo = cc.moveBy(2, cc.p(windowSize.width - 40, windowSize.height - 40));
  • 容器動作(一般都支持鏈式調用)
    • cc.sequence 順序動作,可以讓一系列子動作按順序一個個執行
    • cc.spawn 同步動作,可以同步執行對一系列子動作,子動作的執行結果會疊加起來修改節點的屬性
    • cc.repeat 重複動作,用來多次重複一個動作
    • cc.repeatForever 永遠重複動作
    • cc.speed 速度動作,可以改變目標動作的執行速率
      example
// 讓節點左右來回移動
var seq = cc.sequence(cc.moveBy(0.5, 200, 0), cc.moveBy(0.5, -200, 0));
node.runAction(seq);
// 讓節點在向上移動的同時縮放
var spawn = cc.spawn(cc.moveBy(0.5, 0, 50), cc.scaleTo(0.5, 0.8, 1.4));
node.runAction(spawn);
// 讓節點左右來回移動,並重復5次
var seq = cc.repeat(
            cc.sequence(
                cc.moveBy(2, 200, 0),
                cc.moveBy(2, -200, 0)
            ), 5);
node.runAction(seq);
// 讓節點左右來回移動並一直重複
var seq = cc.repeatForever(
            cc.sequence(
                cc.moveBy(2, 200, 0),
                cc.moveBy(2, -200, 0)
            ));
// 讓目標動作速度加快一倍,相當於原本2秒的動作在1秒內完成
var action = cc.speed(
                cc.spawn(
                    cc.moveBy(2, 0, 50),
                    cc.scaleTo(2, 0.8, 1.4)
                ), 0.5);
node.runAction(action);
  • 動作回調
    • cc.callFunc(callback, context, option)
      示例
// 一連串動作完成後會給玩家加100分
var finished = cc.callFunc(function(target, score) {
    this.score += score;
}, this, 100);
var myAction = cc.sequence(cc.moveBy(1, cc.p(0, 100)), cc.fadeOut(1), finished);
  • 緩動動作
    緩動動作不可以單獨存在,它永遠是爲了修飾基礎動作而存在的,它可以用來修改基礎動作的時間曲線,讓動作有快入、緩入、快出或其它更復雜的特效。需要注意的是,只有時間間隔動作才支持緩動:
var action = cc.scaleTo(0.5, 2, 2);
action.easing(cc.easeIn(3.0));

組件計時器

schedule:開始一個計時器
scheduleOnce:開始一個只執行一次的計時器
unschedule:取消一個計時器
unscheduleAllCallbacks:取消這個組件的所有計時器

component.schedule(callback, interval, repeat, delay)
// 示例
// 以秒爲單位的時間間隔
var interval = 5;
// 重複次數
var repeat = 3;
// 開始延時
var delay = 10;
component.schedule(function() {
    // 這裏的 this 指向 component
    this.doSomething();
}, interval, repeat, delay);
  • 只執行一次的計時器
component.scheduleOnce(function() {
    // 這裏的 this 指向 component
    this.doSomething();
}, 2);
  • 利用回調函數本身取消計時器
this.count = 0;
this.callback = function () {
    if (this.count === 5) {
        // 在第六次執行回調時取消這個計時器
        this.unschedule(this.callback);
    }
    this.doSomething();
    this.count++;
}
component.schedule(this.callback, 1);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章