CocosCreator开发代码速查

Creator 常用方法

基础方法

var str = JSON.stringify(jsObj);// 对象转String
var obj = JSON.parse(str);// String转对象
cc.debug.setDisplayStats(false);// 隐藏debug
cc.director.loadScene('SceneName');// 切换场景
var label = this.node.getComponent(cc.Label);// 获取组件
var label = this.getComponent(cc.Label);
var script = this.addComponent("MarkScript");
var label = this.node.getComponentInChildren(cc.Label);
label.string = "title";// 更新Label文字
var rand = Math.floor(Math.random()*100);// 随机数(0 - 99)
var playerPos = this.game.player.getPosition(); // 节点坐标
var distance = point1.sub(point2).mag();// 两点之间的距离
this.node.destroy(); // 销毁节点
this.node.removeFromParent();
this.sprite.spriteFrame = spriteFrame; // 更改纹理
this.bgSprite.node.color = cc.color(0, 128, 255); //更改颜色
var music = cc.audioEngine.play(musicRes, false); // 播放音乐
cc.audioEngine.stop(music); // 停止播放

定时任务

var marginTime = 5; var repeat = 3; var delay = 10;
repeat=cc.macro.REPEAT_FOREVER;
this.schedule(function () { this.doSomething(); }, marginTime, repeat, delay);
this.scheduleOnce(function () { this.doSomething(); }, 2);
this.unschedule(scheduleCallback);

JS日期格式化

var DateUtil = require('DateUtil');
var DateUtil = {
    dateFormat: function (fmt, date) {
        if (!date) {
            date = new Date();
        }
        let ret;
        const opt = {
            "Y+": date.getFullYear().toString(),        // 年
            "M+": (date.getMonth() + 1).toString(),     // 月
            "d+": date.getDate().toString(),            // 日
            "H+": date.getHours().toString(),           // 时
            "m+": date.getMinutes().toString(),         // 分
            "s+": date.getSeconds().toString()          // 秒
            // 有其他格式化字符需求可以继续添加,必须转化成字符串
        };
        for (let k in opt) {
            ret = new RegExp("(" + k + ")").exec(fmt);
            if (ret) {
                fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
            };
        };
        return fmt;
    }
}
module.exports = DateUtil;

数据存储

var userData = { name: 'alex', level: 1, gold: 100 };
cc.sys.localStorage.setItem(keyString, JSON.stringify(userData));
var savedData = cc.sys.localStorage.getItem(keyString);
var userData = JSON.parse(savedData);

资源加载

// 加载Resources文件夹内的资源文件:不需要带文件后缀名
cc.resources.load(path, function (err, res) {
     if (err) {
         func.call(this, err);
     } else {
         func.call(this, null, res.text);// 文本字符串
         func.call(this, null, res.json);// json对象
         func.call(this, null, res);// 音乐,视频
         func.call(this, null, new cc.SpriteFrame(res));// 图片
     }
 });
 
// 加载本地资源文件:需要带后缀名
if (jsb.fileUtils.isFileExist(path)) {
	cc.assetManager.loadAny({ url: path }, function (err, res) {
		if(err){
            func.call(this, err);
		} else {
            func.call(this, null, res);// 文本字符串
            func.call(this, null, res);// json对象
            func.call(this, null, res);// 音乐,视频

			var texture = new cc.Texture2D();
			texture.initWithElement(res);
			texture.handleLoadedTexture();
			func.call(this, null, new cc.SpriteFrame(texture)); // 图片
		}
    })
} else {
    func.call(this, "file not exist");
}

动态增加 Prefab

var prefab = cc.instantiate(this.Prefab);
var script = prefab.getComponent('PrefabScript');
var callback = {
    onItemClicked(itemData) {
    },
};
script.setData(itemData, callback);
this.node.addChild(prefab);
prefab.setPosition(cc.v2(0, 0));

全局工具类

var Utils = require('Utils');
var Utils = {
    items: new Array(),
    HOST: “http://www.xxxxxx.com”,
}
module.exports = Utils;

可在UI展示的日志工具类

// Log.js
var Log = {
    i(obj1, obj2, obj3, obj4, obj5) {
        if (obj5 == undefined) {
            if (obj4 == undefined) {
                if (obj3 == undefined) {
                    if (obj2 == undefined) {
                        cc.log(obj1);
                    } else {
                        cc.log(obj1, obj2);
                    }
                } else {
                    cc.log(obj1, obj2, obj3);
                }
            } else {
                cc.log(obj1, obj2, obj3, obj4);
            }
        } else {
            cc.log(obj1, obj2, obj3, obj4, obj5);
        }
        if (this.onUpdate) {
            if (obj1 != undefined) { this.onUpdate(obj1); }
            if (obj2 != undefined) { this.onUpdate(obj2); }
            if (obj3 != undefined) { this.onUpdate(obj3); }
            if (obj4 != undefined) { this.onUpdate(obj4); }
            if (obj5 != undefined) { this.onUpdate(obj5); }
        }
    },
    // onUpdate(appendLogText) { },
}
module.exports = Log;

键盘鼠标事件监听

cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, function (event) {
    console.log(event.keyCode);
}, this);
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, function (event) {
    switch (event.keyCode) {
        case cc.macro.KEY.space:
            break;
    }
}, this);
cc.systemEvent.on(cc.SystemEvent.EventType.MOUSE_DOWN, function (event) {
    console.log(event.getLocation());
}, this);
cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_START, callback, this.node);
cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_MOVE, callback, this.node);
cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_END, callback, this.node);
cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_CANCEL, callback, this.node);

动作系统

moveBy, rotateTo, scaleTo, delayTime, jumpBy, fadeTo[透明度], fadeIn, fadeOut, blink[闪烁]
var move = cc.moveBy(animTime, moveX, moveY);
var moveBack = cc.moveBy(animTime, -moveX, -moveY);
var scale = cc.scaleTo(animTime, scaleX, scaleY);
var oneByOneAnim = cc.sequence(action1, action2);
var allStartAnim = cc.spawn(move, scale);
var repeatAnim = cc.repeat(cc.sequence(move, moveBack), repeatTime);
var repeatForeverAnim = cc.repeatForever(cc.sequence(move, moveBack));
var speedUpAnim = cc.speed(cc.spawn(move, scale), 0.5);
node.runAction(anim);
var jumpUp = cc.moveBy(this.jumpDuration, cc.p(0, this.jumpHeight)).easing(cc.easeCubicActionOut());
var jumpDown = cc.moveBy(this.jumpDuration, cc.p(0, -this.jumpHeight)).easing(cc.easeCubicActionIn());
var jumpAction = cc.repeatForever(cc.sequence(jumpUp, jumpDown));
this.node.runAction(jumpAction);

碰撞回调

init () {
    var manager = cc.director.getCollisionManager();
    manager.enabled = true;
    manager.enabledDebugDraw = true;
},
/**
* 当碰撞产生的时候调用
* @param  {Collider} other 产生碰撞的另一个碰撞组件
* @param  {Collider} self  产生碰撞的自身的碰撞组件
*/
onCollisionEnter: function (other, self) {
    console.log('on collision enter');
    // 碰撞系统会计算出碰撞组件在世界坐标系下的相关的值,并放到 world 这个属性里面
    var world = self.world;
    // 碰撞组件的 aabb 碰撞框
    var aabb = world.aabb;
    // 上一次计算的碰撞组件的 aabb 碰撞框
    var preAabb = world.preAabb;
    // 碰撞框的世界矩阵
    var t = world.transform;
    // 以下属性为圆形碰撞组件特有属性
    var r = world.radius;
    var p = world.position;
    // 以下属性为 矩形 和 多边形 碰撞组件特有属性
    var ps = world.points;
},
/**
* 当碰撞产生后,碰撞结束前的情况下,每次计算碰撞结果后调用
* @param  {Collider} other 产生碰撞的另一个碰撞组件
* @param  {Collider} self  产生碰撞的自身的碰撞组件
*/
onCollisionStay: function (other, self) {
    console.log('on collision stay');
},
/**
* 当碰撞结束后调用
* @param  {Collider} other 产生碰撞的另一个碰撞组件
* @param  {Collider} self  产生碰撞的自身的碰撞组件
*/
onCollisionExit: function (other, self) {
    console.log('on collision exit');
}

瓦片地图

step1: "新建地图",
step2: "导入瓦片地图文件",
step3: "新建ground图层",
step4: "新建barriers图层",
step5: "新建actions对象层",
step6: "对象层新建,擦入图块,填写描述,写入数据",

JS 常用方法

JSB fileUtils

jsb.fileUtils.isFileExist(filePath);
jsb.fileUtils.isDirectoryExist(foldPath);
jsb.fileUtils.createDirectory(foldPath);
jsb.fileUtils.getStringFromFile(stringContent, filePath);
jsb.fileUtils.writeStringToFile(stringContent, filePath);
jsb.fileUtils.getDataFromFile(dataContent, filePath);
jsb.fileUtils.writeDataToFile(dataContent, filePath);
jsb.fileUtils.removeFile(filePath);
jsb.fileUtils.getWritablePath();

JS 数组

var size = array.length;
var string = array.toString();// "a,b,c,d,e"
var string = array.join("-");// "a-b-c-d-e"

var newSize = array.push(item1, item2);// 数组追加元素,并返回新数组长度
var newSize = array.unshift(item); // 数组从前面追加元素,并返回新数组长度
var lastItem = array.pop();// 删除数组最后一个元素,并返回该元素
var firstItem = array.shift(); // 删除数组第一个元素,并返回该元素

delete array[0];// 把 array 中的首个元素改为 undefined
array.splice(position, deleteCount, "addItem1", "addItem2");// 方法返回一个包含已删除项的数组
array.splice(0, 1);// 删除 array 中的第一个元素

var array3 = array1.concat(array2); // 连接2个数组
var array4 = array1.concat(array2, array3);// 连接3个数组
var array5 = array1.concat(array2, item1, [item2, item3]);// 连接多个数组和元素

var array2 = array1.slice(startPosition, endPosition);// 从数组中截取一个新数组
array.sort();// 字符串数组排序
array.sort(function(a, b) { return a.price - b.price; });// 原数按规则排序
array.sort(function(a, b){return 0.5 - Math.random()}); // 随机排序,打乱顺序

JS Map

var map = new Map();
map.set("id", { name: "", age: 10 });
map.set({ id: "", attr: "" }, { name: "", age: 10 });
map.has("id");
map.get("id").age;
map.delete("id");
map.keys();
map.values();
map.clear();

JS String

var char = string.charAt(index);
var charCode = string.charCodeAt(index);
var string4 = string.concat(string2, string3);
var index = string.indexOf("", formIndex);
var string = string.replace(/orgString/, "targetString");
var string = string.replace(/orgString/g, "targetString");
var array = string.split("\n");
var string = string.substr(start, length);
var string = string.substring(start, stop);

网络请求Get

get(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.onload = function () { // 请求成功回调
        var response = xhr.responseText;
        callback.call(this, null, response);
    };
    xhr.onerror = function () { // 请求出错回调
        callback.call(this, "http error");
    };
    xhr.onloadend = function () { // 请求结束回调
    };
    xhr.ontimeout = function () { // 请求超时回调
        callback.call(this, "http timeout");
    };
    xhr.setRequestHeader('key', 'value'); // 设置请求头
    xhr.open("GET", url, true);
    xhr.send();
},

网络请求Post

post(url, body, callback) {
    var xhr = new XMLHttpRequest();
    xhr.onload = function () {
        var response = xhr.responseText;
        callback.call(this, null, response);
    };
    xhr.onerror = function () {
        callback.call(this, "http error");
    };
    xhr.onloadend = function () {
    };
    xhr.ontimeout = function () {
        callback.call(this, "http timeout");
    };
    xhr.open("POST", url, true);
    xhr.send(body);
},

文件下载

downloadFile(filePath, url, callback, skipExist) {
    if (skipExist && jsb.fileUtils.isFileExist(filePath)) {
        callback.onSuccess(filePath);
        return;
    }
    var downloader = new jsb.Downloader();
    downloader.createDownloadFileTask(url, filePath, "identifier");
    var errorCallback = function (sender, errorCode, errorCodeInternal, errorMsg) {
        Log.i(sender, errorCode, errorCodeInternal, errorMsg);
        jsb.fileUtils.removeFile(filePath);
        if (callback.onFailed) {
            callback.onFailed(errorMsg);
        }
    };
    var progressCallback = function (sender, buffer, receivedBytes, totalSize) {
        if (callback.onProgress) {
            var progress = receivedBytes / totalSize;
            callback.onProgress(progress, filePath);
        }
    };
    var successCallback = function (sender) {
        if (callback.onSuccess) {
            callback.onSuccess(filePath);
        }
    };
    downloader.setOnTaskError(errorCallback);
    downloader.setOnTaskProgress(progressCallback);
    downloader.setOnFileTaskSuccess(successCallback);
},

JSZip解压

// 首先将 jszip.min.js 导入工程作为插件
// Utils.js
unZipFiles(zipFilePath, foldPath, callback) {
    cc.log("zipFilePath:" + zipFilePath);
    jsb.fileUtils.createDirectory(foldPath);
    var zip = new JSZip();
    var subCount = 0;
    var count = 0;
    var _unzipFirstFile = function (res, files) {
        var file = files.shift();
        if (!file) {
            callback.onCompleted();
        }
        var name = file.name;
        if (!file.dir) {
            if (name.indexOf(".jpg") != -1) {
                res.file(name).async('uint8array').then(uint8array => {
                    jsb.fileUtils.writeDataToFile(uint8array, foldPath + "/" + name);
                    callback.onFileUnziped(name, ++count, subCount);
                    _unzipFirstFile(res, files);
                }, error => {
                    ++count;
                    callback.onFileIgnored(name, count, subCount, error);
                    _unzipFirstFile(res, files);
                })
            } else {
                ++count;
                callback.onFileIgnored(name, count, subCount, "not .jpg file");
                _unzipFirstFile(res, files);
            }
        } else {
            ++count;
            jsb.fileUtils.createDirectory(foldPath + "/" + name);
            callback.onFileIgnored(name, count, subCount, "create directory");
            _unzipFirstFile(res, files);
        }
    };

    zip.loadAsync(jsb.fileUtils.getDataFromFile(zipFilePath)).then(function (res) {
        callback.onStart();
        var fileArray = Object.values(res.files);
        subCount = fileArray.length;
        _unzipFirstFile(res, fileArray);
    }, function (error) {
        callback.onError(error);
    });
},

// MainSceneScript.js
unzipFromResourcesFoldTest {
    cc.resources.load("common/image", cc.Asset, function (err, res) {
        if (err) {
            cc.log(err);
        } else {
            var Utils = require('Utils');
            var zipCallback = {
                onStart() { },
                onCompleted() { cc.log("onCompleted"); },
                onError(error) { cc.log("onUnzipError"); },
                onFileUnziped(name, count, subCount) {
                    cc.log("正在解压资源(" + parseInt(count / subCount * 100) + "%):" + name);
                },
                onFileIgnored(name, count, subCount, reason) {
                    cc.log("正在解压资源(" + parseInt(count / subCount * 100) + "%):" + name);
                },
            }
            var unzipFold = Config.ROOT_PATH;
            Utils.unZipFiles(res.nativeUrl, unzipFold, zipCallback);
        }
    });
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Cocos Creator 是一个强大的游戏开发引擎,使用 TypeScript 编写,提供了丰富的工具和功能来帮助开发者创建各种类型的游戏。如果你想下载 Cocos Creator 的源代码,可以按照以下步骤进行操作: 1. 访问 Cocos Creator 的官方网站:https://www.cocos.com/creator。在该网站上,你可以找到 Cocos Creator 的最新版本和其他相关信息。 2. 在官方网站上,你可以找到一个名为“下载”的菜单选项。点击该选项,你将进入下载页面。 3. 在下载页面上,你将看到不同操作系统的选项。选择适用于你所使用的操作系统的选项,比如 Windows、Mac 或 Linux。 4. 选择适用于你的操作系统的选项后,你将被重定向到一个页面,该页面上列出了不同版本的 Cocos Creator。选择最新版本并点击下载按钮。 5. 下载完成后,你可以在你选择的目录中找到一个压缩文件,其中包含了 Cocos Creator 的源代码。 6. 解压缩下载的压缩文件,你将得到一个包含了 Cocos Creator代码的文件夹。 现在你可以使用任何文本编辑器或集成开发环境(IDE)来查看、修改和编译 Cocos Creator 的源代码了。请注意,使用 Cocos Creator代码有一些系统和软件的要求,比如 Node.js、TypeScript 编译器等。你可以在官方网站上查找相关的系统要求和安装指南。 希望以上回答对你有所帮助!如有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值