creator入坑记录帖

新项目立项
对使用过程遇到的问题和解决立此帖记录

  1. cc.Class: Should not define constructor for cc.Component.
    Component 是特殊的 CCClass,不能定义构造函数,它的构造职能可由 onLoad 方法代替。

  2. 动态加载图片并创建精灵

加载一个bg_single.png的图片文件 图片路径assets/resources/bg_single.php
异步(写法异常怪异)

     cc.loader.loadRes("bg_single.png/bg_single", function (err, spriteFrame) {
         cc.log("load test", err, spriteFrame)
         var node = new cc.Node("New Sprite");
         var sprite = node.addComponent(cc.Sprite);
         sprite.spriteFrame = spriteFrame;
         self.node.addChild(node)
     });

同步

 var url = cc.url.raw('resources/bg_single.png');
 var spriteFrame = new cc.SpriteFrame(url, cc.Rect(0, 0, 90, 128));
 var node = new cc.Node("New Sprite");
 var sprite = node.addComponent(cc.Sprite);
 sprite.spriteFrame = spriteFrame;
 self.node.addChild(node)

PS

     node.parent = self.node
     self.node.addChild(node)

这两个写法是一个意思。
官方说明文档里关于加载部分实在是 看不懂。 这还是用chrome调试才发现是这么写的。

大概理解任意节点绑定了script脚本后,脚本对像会被赋予一个当前视图节点的引用,用this.node可以直接访问到。
另群里有人说 脚本主动加载资源最放放在start事件中进行 不要放在onload中 具体原因还不明白,后续再看。

关于异步加载图片和图集 并从中创建精灵

var list = [
cc.url.raw(‘resources/bg_single.png’),
cc.url.raw(‘resources/bastionUi_parts.plist’),
cc.url.raw(‘resources/bastionUi_parts.png’),
];
display.preload(list, function(is, per){
cc.log(is, per)
if (is) {
display.addSpriteFrames(cc.url.raw(“resources/bastionUi_parts.plist”), cc.url.raw(‘resources/bastionUi_parts.png’))
var node = new cc.Node(“New Sprite”);
var sprite = node.addComponent(cc.Sprite);
var spriteFrame = cc.spriteFrameCache.getSpriteFrame(‘bastionFinger.png’)
sprite.spriteFrame = spriteFrame;
self.node.addChild(node);

            var texture = cc.textureCache.getTextureForKey(cc.url.raw("resources/bg_single.png"));
            var node = new cc.Node("New Sprite");
            var sprite = node.addComponent(cc.Sprite);
            // var spriteFrame = cc.spriteFrameCache.getSpriteFrame('bg_single.png')
            sprite.spriteFrame = new cc.SpriteFrame(texture)
            node.setPosition(110, 110)
            self.node.addChild(node)
        }
    })

display.js是参考quick里定义的一个文件
var Display = {}
//添加精灵图集框架
//如果plist和png资源均未预加载则会触发io
//可理解为阻塞式加载
Display.addSpriteFrames = function(plist, png)
{
cc.spriteFrameCache.addSpriteFrames(plist, png)
};
//预加载
//list array

Display.preload = function(list, cb)
{
var total = list.length
var _t = 0
cc.log(“preload”, list)
cc.loader.load(list, function (errors, results) {
if (errors) {
for (var i = 0; i < errors.length; i++) {
cc.log(‘Error url [’ + errors[i] + ']: ’ + results.getError(errors[i]));
}
}
_t++;
cb(false, parseInt(100 * _t / total))
}, function(){
cb(true)
});
}
module.exports = Display;
几行代码折腾一天。感觉资源管理这块很麻烦。
这两天折腾这个,感觉会不会是我一直用2.x的cocos,很多概念在ccc里变化很大,现在基本上已经不需要自已手动控制异步加载了?

1赞

Component 是特殊的 CCClass,不能定义构造函数,它的构造职能可由 onLoad 方法代替。

1赞

所有从component中继承的子类中都不能重写ctor,而用onload代替。