策划同学想在游戏内增加投显子弹数量的功能,看了下Laya中并没有提供3d文本相关的组件,所以先去百度下看了下并没有相关的轮子可以直接使用,只能自己写下了
首先分析下需求 子弹数量投显 只需要显示0-9的数字就可以了
那么最简单的一种方式是:
让建模同学每一位搞一个面片 然后把对应的数字贴图贴上去 有几位搞几个面片
显然这种方式是最差解。。。
既然是造轮子,当然不能就这样结束了!
所以,决定用一张贴图一面片来实现这个功能
那么问题点就在于:怎么把0-9这几个数字在运行时实时的将需要的散图合并成一张新的贴图 ,然后放到材质中去渲染
Laya中有可以获取到加载后的图片的像素数据的接口 即 Texture.getTexturePixels
关键代码:
var ctx = new ILaya.Context();
ctx.size(width, height);
ctx.asBitmap = true;
var uv = null;
if (x != 0 || y != 0 || width != tex2dw || height != tex2dh) {
uv = this._uv.slice();
var stu = uv[0];
var stv = uv[1];
var uvw = uv[2] - stu;
var uvh = uv[7] - stv;
var uk = uvw / texw;
var vk = uvh / texh;
uv = [stu + rePosX * uk, stv + rePosY * vk,
stu + (rePosX + draww) * uk, stv + rePosY * vk,
stu + (rePosX + draww) * uk, stv + (rePosY + drawh)