好像復雜點的LuaSTG教程3:render圖像的函數(shù)
我就是想起來講什么就講什么了()
而且render其實也不是特別難(?),就先講了吧(然而這個廢物還沒太懂就開始講了真的沒關(guān)系嗎?)
好了,首先是加載圖片等資源,我就不用Animation了(因為我也沒試過RenderAnimations()
這里我用上一期用過的斬擊

我們定義一個object,把圖像選成這個圖片(我這里是image:zhanji),然后創(chuàng)建這個object
啟動,然后是這個樣子

然后是load image group,用法和load image類似,不過多了和cols and rows,即有幾行幾列,默認是一行四列

我們給這個object加個render回調(diào)函數(shù),再將里面的do default action刪掉,在啟動游戲,會怎樣呢?
還記得回調(diào)函數(shù)在哪嗎?對了,就是在unit里的unit event trigger

然后運行后你會發(fā)現(xiàn)這個obj好像消失了!
其實就是沒有運行渲染默認的函數(shù)啦
那么這里就來講一下Render這個函數(shù)
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)
設(shè)置圖像的混合模式和頂點顏色。圖像左上角的頂點編號為0,順時針旋轉(zhuǎn)編號增加。若省略color0,則維持原頂點顏色;若省略color1、color2、color3,則將所有頂點的顏色都設(shè)置為color0。
來自lstg自帶的說明文檔
帶[]的是可選參數(shù)
仔細觀察,x,y,rot這些....不就是self.x,self.y,self.rot這些嗎?
那么就讓我們來簡單的實現(xiàn)一下

當然這并沒有什么實際意義(?)self.img是你選擇給這個object的圖片,在我這里就等同于"image:zhanji",然后最后一項z在ui和world坐標系里沒有用,可填可不填
self._blend,self._a,self._r,self._g,self._b分別代表這個object所使用的圖像(self.img)在這個obj里要設(shè)置成的混合模式,不透明度,RGB
然后是剩下的這一堆函數(shù)()
RenderRect(imagename,x1,x2,y1,y2)
將圖像繪制到一個矩形上。
?
Render4V(imagename,x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3)
將圖像繪制到一個3維的四邊形上。圖像左上角的頂點編號為0,順時針旋轉(zhuǎn)編號增加。如果不是在3D模式下,那么所有的z坐標要取0.5。
?
RenderTexture(texturename,blendmode,vertex0,vertex1,vertex2,vertex3)
將紋理的一個四邊形區(qū)域繪制到一個3維四邊形上。vertext是一個數(shù)組,格式為{x,y,z,u,v,color},其中u、v是紋理坐標(左上角是(0,0))。如果不是在3D模式下,那么所有的z坐標要取0.5。
RenderRect我沒用過,但是我可以畫個示意圖:

然后是render4V,這個在3D背景會經(jīng)常用到

這四個點的位置是隨意的,所以你畫正方形,長方形,平行四邊形,梯形,三角形*(^%&^*%^(**.....
都可以,之前我不會用RenderTexture的時候我就拿這個做純狐那種一個點飛出來的背景(這種下期再講)
然后就是這個RenderTexture,曾經(jīng)卡了我好久才理解的()
RenderTexture(texturename,blendmode,vertex0,vertex1,vertex2,vertex3)
將紋理的一個四邊形區(qū)域繪制到一個3維四邊形上。vertext是一個數(shù)組,格式為{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,就是為了限制
我這里真的講不來,把這個玩意放上來希望自己能理解()