新项目立项
对使用过程遇到的问题和解决立此帖记录
-
cc.Class: Should not define constructor for cc.Component.
Component 是特殊的 CCClass,不能定义构造函数,它的构造职能可由 onLoad 方法代替。 -
动态加载图片并创建精灵
加载一个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里变化很大,现在基本上已经不需要自已手动控制异步加载了?