LV. 16
GP 263

【心得】LUA在螢幕上顯示 【圓】

樓主 misk yrgna1234
GP18 BP-
大家好 我是misk
這次的成果我覺得相當有趣,所以想分享給大家。

相信有寫過UI.lua的玩家們絕對會對UI.box有印象,因為它可以在螢幕上顯示圖形。
但是....為什麼官方只給我們矩形的API呢?我們能不能做出圓形
當然可以,我想要分享一個自製圓形函式給大家。

***UI.lua***(如要使用請務必複製函式內容)
circle_part={} --在UI.lua中設全域變數
function circle(number,quality,position_x,position_y,radius,e,r_,g_,b_,a_) --函式內容
    circle_part[number]={}
    local i=0
    while i<=quality*2 do
        circle_part[number][i]=UI.Box.Create()
        set={
            x=math.floor((position_x+radius*i/quality)/e),
            y=math.floor((position_y+radius-math.sqrt(math.abs(radius*radius-(radius*(quality-i)/quality)*(radius*(quality-i)/quality))))*e),
            width=math.floor((radius/quality)/e)+1,
            height=math.floor((math.sqrt(math.abs(radius*radius-(radius*(quality-i)/quality)*(radius*(quality-i)/quality))))*e*2),
            r=r_,
            g=g_,
            b=b_,
            a=a_
        }
        circle_part[number][i]:Set(set)
        i=i+1
    end
end

我先說明一下定義的參數。
function circle(number,quality,position_x,position_y,radius,e,r_,g_,b_,a_)
number:你可能不會只使用一個圓形,因此如果要產出兩個圓,就要為圓加上"編號"。
quality:畫質。畫質越高,稜角越不明顯,但是能製造的圓就越少,反之。
position_x,position_y:這裡的座標並不是圓心!而是左上角的座標,使用方法就跟UI.Box的座標定義一樣。
radius:半徑。
e:你希望的可能不是正圓而是橢圓,因此我多設了一個參數(正圓參數為1),此為橢圓的壓縮量。
r_,g_,b_,a_:圓形的顏色,透明度。


Ex:circle(1,250,200,200,250,1,0,255,0,255)
結果:
當我把半徑縮小時:circle(1,250,200,200,100,1,0,255,0,255)
結果:
當我想製作一個橢圓時,只要將e參數變動就行。
Ex:circle(1,250,600,0,200,1.4,0,255,0,255)
結果:
Ex:circle(1,250,200,0,200,0.6,0,255,0,255)
結果:
當我想要製作很多圓,一樣很方便。但這裡請注意一件事情,這個圓的組成方式是由一條條的矩形組成的,然後再將矩形存取在陣列中,然而陣列有限制大小,無法儲存太多圓,因此想要更多的圓就要將畫質(參數quality)降低(這個問題我之後再嘗試破解)。
Ex:
circle(1,200,200,0,200,0.6,0,255,0,255)
circle(2,200,200,300,200,1,0,0,255,255)
circle(3,200,700,300,200,1,0,0,255,255)
結果:
當我把畫質調降為50時,結果為。
差別就自己比較吧!

這次的成果介紹到這裡結束,如果巴哈有人能提供更好的畫圓方式也希望能不吝提出,謝謝!
18
-
LV. 25
GP 149
2 樓 鑲米 FragrantRice
GP1 BP-
雖然看不懂函數那裡 矩形為什麼可以變圓形
不過 好厲害的樣子
1
-
未登入的勇者,要加入 3 樓的討論嗎?
板務人員:

3628 筆精華,11/26 更新
一個月內新增 13
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】