[]分享:Sprite 转换成3D贴图(Texture2D)的方法,如果有更好的方法,请告诉我。
因为要用到的贴图并不是固定的,所以有这样的需求,之前问过,不过暂时没有结果:https://ask.layabox.com/question/5622
看不太懂官方的源码,所以用了下面这种蹩脚的方法来动态转换,如果有更好的办法,也请告诉我,先谢谢了。
1.首先在 index.html 文件中放置如下代码:
直接这样:
看不太懂官方的源码,所以用了下面这种蹩脚的方法来动态转换,如果有更好的办法,也请告诉我,先谢谢了。
1.首先在 index.html 文件中放置如下代码:
<script type="text/javascript">2. 在 as 代码中加入如下函数:
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>
private static var createTextureCallBack:Function;3. 最终的调用:
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);
}
public function init(){你会发现我用了一个 Laya.timer.once ,如果你的对象不大,也不用这么干。
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
}
直接这样:
public function init(){
var s:sprite = create_a_sml_sprite();
GameUtil.createTexture(s,onTexture2DReady,this);
}
public function onTexture2DReady(t:Texture2D):void {
//todo
}
没有找到相关结果
已邀请:
要回复问题请先登录
4 个回复
cocochengang
赞同来自: 魔狼
cuixueying
赞同来自:
魔狼
赞同来自:
kura
赞同来自:
官方不是有api吗?难道是我理解错了?