好像复杂点的LuaSTG教程3:render图像的函数
我就是想起来讲什么就讲什么了()
而且render其实也不是特别难(?),就先讲了吧(然而这个废物还没太懂就开始讲了真的没关系吗?)
好了,首先是加载图片等资源,我就不用Animation了(因为我也没试过RenderAnimations()
这里我用上一期用过的斩击

我们定义一个object,把图像选成这个图片(我这里是image:zhanji),然后创建这个object
启动,然后是这个样子

然后是load image group,用法和load image类似,不过多了和cols and rows,即有几行几列,默认是一行四列

我们给这个object加个render回调函数,再将里面的do default action删掉,在启动游戏,会怎样呢?
还记得回调函数在哪吗?对了,就是在unit里的unit event trigger

然后运行后你会发现这个obj好像消失了!
其实就是没有运行渲染默认的函数啦
那么这里就来讲一下Render这个函数
Render(imagename,x,y[,rot=0[,hscale=1[,vscale=hscale[,z=0.5]]]])
绘制一个图像。
SetImageState(imagename,blendmode)
SetImageState(imagename,blendmode,color0)
SetImageState(imagename,blendmode,color0,color1,color2,color3)
设置图像的混合模式和顶点颜色。图像左上角的顶点编号为0,顺时针旋转编号增加。若省略color0,则维持原顶点颜色;若省略color1、color2、color3,则将所有顶点的颜色都设置为color0。
来自lstg自带的说明文档
带[]的是可选参数
仔细观察,x,y,rot这些....不就是self.x,self.y,self.rot这些吗?
那么就让我们来简单的实现一下

当然这并没有什么实际意义(?)self.img是你选择给这个object的图片,在我这里就等同于"image:zhanji",然后最后一项z在ui和world坐标系里没有用,可填可不填
self._blend,self._a,self._r,self._g,self._b分别代表这个object所使用的图像(self.img)在这个obj里要设置成的混合模式,不透明度,RGB
然后是剩下的这一堆函数()
RenderRect(imagename,x1,x2,y1,y2)
将图像绘制到一个矩形上。
Render4V(imagename,x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3)
将图像绘制到一个3维的四边形上。图像左上角的顶点编号为0,顺时针旋转编号增加。如果不是在3D模式下,那么所有的z坐标要取0.5。
RenderTexture(texturename,blendmode,vertex0,vertex1,vertex2,vertex3)
将纹理的一个四边形区域绘制到一个3维四边形上。vertext是一个数组,格式为{x,y,z,u,v,color},其中u、v是纹理坐标(左上角是(0,0))。如果不是在3D模式下,那么所有的z坐标要取0.5。
RenderRect我没用过,但是我可以画个示意图:

然后是render4V,这个在3D背景会经常用到

这四个点的位置是随意的,所以你画正方形,长方形,平行四边形,梯形,三角形*(^%&^*%^(**.....
都可以,之前我不会用RenderTexture的时候我就拿这个做纯狐那种一个点飞出来的背景(这种下期再讲)
然后就是这个RenderTexture,曾经卡了我好久才理解的()
RenderTexture(texturename,blendmode,vertex0,vertex1,vertex2,vertex3)
将纹理的一个四边形区域绘制到一个3维四边形上。vertext是一个数组,格式为{x,y,z,u,v,color},其中u、v是纹理坐标(左上角是(0,0))。如果不是在3D模式下,那么所有的z坐标要取0.5。
这四个table和上面的render4V的有点类似
这个uv坐标是什么意思呢?
这个uv坐标能够让你只渲染这个图像的一部分,

这样就只会渲染这张图片的框起来的部分(?),你这么说谁懂啊
好吧,那么来举个例子:


这张图片的大小为250*16
这个min(self.timer*250/60,250)的意思:self.timer每帧自增1,当self.timer<60的时候,取self.timer*250/60,当self.timer>=60的时候取250,就是为了限制
我这里真的讲不来,把这个玩意放上来希望自己能理解()