以前2.4可以通过下面的代码来创建一个纯色贴图
let texture = new cc.RenderTexture();
texture.initWithData(new Uint8Array([0, 0, 0]), cc.Texture2D.PixelFormat.RGB888, 1, 1);
现在3.0 RenderTexture没有initWithData这个方法了,API里也没有找到相关的设置方法,现在完全是一脸懵逼了,也没找到其他接口。求官方大佬指教~
帮你顶上去
其实主要思路是怎么创建一张2*2像素的纯白色图片,有了这个图片设置到Sprite组件的SpriteFrame里就能正确显示Sprite设置的颜色了,具体实现:
var imageObj = new Image();
imageObj.src = “data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACAQMAAABIeJ9nAAAAA1BMVEX///+nxBvIAAAACklEQVQI12MAAgAABAABINItbwAAAABJRU5ErkJggg==”;
var textureObj = new Texture2D();
textureObj.image = new ImageAsset(imageObj);
var sf = new SpriteFrame();
sf.texture = textureObj;
这方法实测可行,但是个人感觉有点偏门,建议官方提供更简单更效率的方法
我的做法与 @houou 相似,都是利用已经转成 base64 的字符串生成对象。
但是 new Image() 在原生下不可用,因为它是个 DOM 对象。
我的方法是:
const base = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACAQMAAABIeJ9nAAAAA1BMVEX///+nxBvIAAAACklEQVQI12MAAgAABAABINItbwAAAABJRU5ErkJggg==';
cc.assetManager.loadRemote(base, { ext: '.png' }, (err: Error, asset: cc.Texture2D) => {
if (err) return cc.error(err);
const sf = new cc.SpriteFrame(asset);
})
感谢分享,现在好像只能这样了。。。
谢谢分享。。。只能等官方出API才能不这么麻烦了。。。
try{
let img = new ImageAsset();
img.reset({
_data: new Uint8Array([0,0,0]),
width: 1,
height: 1,
format: Texture2D.PixelFormat.RGBA8888,
_compressed: false
});
let texture = new Texture2D();
texture.image = img;
let sf = new SpriteFrame();
sf.texture = texture;
sprite.spriteFrame = sf;
}catch(err){
console.error('setColorImg error with:',err);
}
我之前有尝试过这样解决,但是渲染的时候会报错, IMemoryImageSource对象好像有问题
这个是我之前在v2.4.3版本上使用的,主要是加载了引擎自带贴图,这个你要在3.0试下看是否可行。
/**设置为默认图 */
public static WGHEXO_setDefaultSpf(sp: cc.Sprite, cb?: Function, caller?: any) {
if (!CC_EDITOR) return;
let url = 'db://internal/image/default_sprite_splash.png/default_sprite_splash';
Editor.assetdb.queryAssets(url, "sprite-frame", (err, ress) => {
if (!err) {
if (ress.length > 0) {
cc.loader.load({ uuid: ress[0].uuid }, (err, spf) => {
if (!err) {
sp.spriteFrame = spf
if (cb) {
if (caller) cb.bind(caller)
cb();
}
}
});
} else {
cc.log("没有资源");
}
}
});
}
用不了了,报错,接口都没有了,Editor在3.0是一个BaseEditor,没有assetdb, 我在api里也没找到有获取引擎自带资源的接口。你这个方法是个异步方法,我觉得你如果不更新到3.0可以用我之前的方法,同步方法而且很简单,动态创建了一个1*1的纯色纹理贴图,[0,0,0]可以自行替换0-255的任意数字组成你想要的颜色,或者再自行改节点的颜色也可以。
let texture = new cc.RenderTexture();
texture.initWithData(new Uint8Array([0, 0, 0]), cc.Texture2D.PixelFormat.RGB888, 1, 1);
let sp = new cc.SpriteFrame(texture);
sprite.spriteFrame = sp;
加个sf.packable = false;就可以了,动态合图有问题
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。