[]分享:Sprite 转换成3D贴图(Texture2D)的方法,如果有更好的方法,请告诉我。

因为要用到的贴图并不是固定的,所以有这样的需求,之前问过,不过暂时没有结果:https://ask.layabox.com/question/5622
 
看不太懂官方的源码,所以用了下面这种蹩脚的方法来动态转换,如果有更好的办法,也请告诉我,先谢谢了。
 
1.首先在 index.html 文件中放置如下代码:
<script type="text/javascript">
function convertCanvasToImage(canvas,callback,thisObj) {
var image = new Image();
image.onload = function() {
console.log("图片已经加载");
callback(image,thisObj)
};
console.log("图片加载中...")
image.src = canvas.toDataURL("image/png");
return image;
}
</script>
2. 在 as 代码中加入如下函数:
private static var createTextureCallBack:Function;
public static function createTexture(s:Sprite,callback:Function,callbackThis:Object):void{
createTextureCallBack = callback;
var htmlCanvas:HTMLCanvas = s.drawToCanvas(512,512,0,0);
var realCanvas:* = htmlCanvas.getCanvas();
var img:* = Browser.window.convertCanvasToImage(realCanvas,createTextureOnImgReady,callbackThis);
}
private static function createTextureOnImgReady(img:*,callbackThis:Object):void
{
var texture:Texture = new Texture(img);
var texture2D:Texture2D = new Texture2D();
texture2D["onAsynLoaded"](""+Math.random(),texture.bitmap);
createTextureCallBack.call(callbackThis,texture2D);
}
3. 最终的调用:
public function init(){
var s:sprite = create_a_big_sprite();
Laya.timer.once(250,this,function():void{
GameUtil.createTexture(s,onTexture2DReady,this);
});
}

public function onTexture2DReady(t:Texture2D):void {
//todo
}
你会发现我用了一个 Laya.timer.once ,如果你的对象不大,也不用这么干。
直接这样:
public function init(){
var s:sprite = create_a_sml_sprite();
GameUtil.createTexture(s,onTexture2DReady,this);
}

public function onTexture2DReady(t:Texture2D):void {
//todo
}
 
 
 
 
 
 
已邀请:

cocochengang

赞同来自: 魔狼

希望官方有空时能做个工具类完善下,确实很需要呀!

cuixueying

赞同来自:

好的,谢谢分享!

魔狼

赞同来自:

兄弟 你是在做贴花吗?

kura

赞同来自:

TIM图片20190822180610.png

官方不是有api吗?难道是我理解错了?

要回复问题请先

商务合作
商务合作