2014年8月28日 星期四

畫線練習結束

    花了一周的時間研究畫線的功能聽起來似乎有點扯,不過我自己倒是喜歡這樣的學習方式,可以比較深入的了解,而不只是會用而已,不過五天的時間中有兩天都花在想多邊形的公式,還把三角函數拿出來複習一翻,然後就是卡在corona本身一些API的限制上了。

   原本書上的範例是給你十個坐標點,然後用display.newLine的方式去吧線段畫出來,而因為display.newLine只能畫單一線條,所以要再用append{}來把所有的線段接起來變成一個五角星形,然後我就在想,實務上如果每次都要去找出這十個點來不是很浪費時間嗎?為什麼不直接寫個函式去產生要的多邊形,然後就開始在研究正多邊形的一堆數學,然後又對芒星類形的畫法感到興趣,所以也一併做了不少研究,反正我試了一堆算法,有些可以做到有些則是做不到,心得大概是:

    1.我發現有display.newPolygon這個API,只要把十個座標點丟進去就可以幫你畫出一個多邊形來,結果書上卻只教人一條線一條線的接起來?
    2.display.newPolygon無法處理有交叉線段的多邊形,可以畫出圖形,但是只有線條,而且會出現警告
    3.採用display.newLine接起來的多邊形,基本上還是一個線段物件,所以它的軸心是以第一個線段來定義的,旋轉之類的也是在線段基礎上,這意味著我用線段接起來的多邊形在旋轉時,並不是以多邊形的中心來旋轉,而是以第一個畫出來的邊線段來旋轉
    4.我想過一些比較變態的方式要來解決我遇到的問題,不過後來都算了,只是練習而己,不要搞得太複雜
    5.使用display.newPolygon時,它並不會照著你給的頂點座標去定位多邊形,而是以你給的第一組位置坐標做為多邊形的軸心,然後以這個軸心為中心去重新定位各點的置,簡單來說,你提供的各頂點坐標只是一個相對參考值,corona會自己再去算出一個新的頂點坐標來畫多邊形
    6.我有試著用Group的方式來組織多個多邊形,但這會讓最後的引用變的麻煩,比如你得用group[i]的方式去一個一個改變group中的物件的屬性。
    7.lua 語法沒有switch case的概念,只能用if...elseif..end或利用table的特形來達到類似switch case的使用

    最後我寫了一個可以產生三種正多邊形(正多邊形,正星形,正芒星)的函式來用,比如書上的範例自然是豐富許多,也初步掌握了corona SDK及lua言法的一些特性。




一開始完成的函式,可以算出各頂點的座標,
然後把線段接起來變成星形或多邊形

使用newPolygon API時會重新定位各頂點座標,
圖上下方的線段兩端點是正確的座標點,
但是可以看到三角形為了配合API 的限制,所以有了偏移

正星形要畫出來並不難,而是畫完後不好使用,因為它只是線段的集合,
無法填滿,要修改屬性也得一組線段一組線段的改。

最後的成果,仿書上範例透過enterFrame讓圖形旋轉,
由於我的函式可以產生各種多角星形,
所以畫面看起來有趣多了。


沒有留言:

張貼留言