欢迎光临散文网 会员登陆 & 注册

好像复杂点的LuaSTG教程3:render图像的函数

2020-04-17 11:31 作者:SSWTLZZ  | 我要投稿

我就是想起来讲什么就讲什么了()

而且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背景会经常用到

上面的图片的3和4的位置要对调()

这四个点的位置是随意的,所以你画正方形,长方形,平行四边形,梯形,三角形*(^%&^*%^(**.....
都可以,之前我不会用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,就是为了限制

我这里真的讲不来,把这个玩意放上来希望自己能理解()


好像复杂点的LuaSTG教程3:render图像的函数的评论 (共 条)

分享到微博请遵守国家法律