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讓圖形旋轉,
由於我的函式可以產生各種多角星形,
所以畫面看起來有趣多了。


2014年8月15日 星期五

一定要從Hello World開始

  雖然一直都有疑惑為什麼一定要先寫Hello World,但最終還是從這裹開始練習了,我當然也有去查過世界上的第一支程式就是Hello World,所以之後大家都從這裹開始。

  原本是打算今天要先熟悉GIT的,不過後來想想自己也還沒開始正式的寫案子,所以應該先把基本的東西都弄熟了,再來加入GIT的世界;然後又花了點時間研究如何在Eclipse中來啟動Corona模擬,一直都不成功,我懷疑是MAC OS的問題,所以明天回家後用PC測試一下就知道,所以最後結論就是用官方推薦的Sublime這個編輯器來寫程式碼。

  把Hello World這個範例檔拿出來研究了一下,然後看到作者放著display.newText中的坐標不用反而另外使用變數.x的方式來放置文字覺得很不解,所以動作做了修改,結果發現在API中的參數是可以直接做一些運算的,所以另外以變數的方式去放置實在看不太出來必要性,然後自己又加上了迴圈來測試在API中帶入變數會如何,發現區域變數和全域變數會打架,Lua中的區域和全域變數的概念和我以前學的程式好象有一些不一樣,這個問題打算留到明天再來研究,反正後來做了調整也把問題解決了,最後得到一個自己修改後的Hello World如下圖,在For迴圈中調用Display.newtext時,同時針對坐標及顏色都做了變數的增量,做出這種顏色漸變,位置漸移的效果


2014年8月14日 星期四

第一天的進度

  第一開始只是簡單的環境安裝,寫了幾行測試用的程式,但是己經覺得很踏實了,前兩周都還只是拿著書在看而己。

  說到書,目前市面上有關corona SDK的中文書似乎只有兩本,我買了最近出的那一本,不過看了前面幾章就發現到一些錯誤,我想這大概是因為兩個共同作者都不算是技術底的,只是會用而己,看來等我熟悉一點之後,也可以自己來寫本書了。

  目前書中最明顯的錯誤就在講述流程控制時,認為for 迴圈只能呆板的一次增加一個數值,只有While迴圈可以透過在敍述句中以x++或x=x+2來控制遞增量,只要有一定的基本程式語言概念的大概都會看出這樣的說法是有問題的吧。

  然後我在官方的教學影片中找到了解答,基本上有兩種用法,一個是家知道的固定次數的使用方式:

For i=start , stop do

   some code....

end

但事實上,完整的語法和其它語言一樣是可以放入遞增量的,只是沒寫時預設是i++這樣的意思,所以你可以這樣使用:

for i =1 , 10 , 2 do

     print(" i ")

end

這會印出1,3,5,7,9

也可反過來改成遞減量:

 for i=10 , 1 , -3 do
     
       print(" i ")

 end

這會印出10,7,4,1

第二種用法有點神,但也合理,說是用Key,value的成對方式來使用,這和其它語言中直接把陣列放到for迴圈中一個一個取出來的意思接近,詳細做法看官方影片吧。


MACBOOK入手,準備開始正式的APP之路

  從去年結訓到現在也一年了,中間不但沒找到工作,反正做踏入保全業,到現在為止也做了快一年的保全了,中間也曾打算去考高普考,不過在朋友的點醒下,現在開始決定邊寫APP邊準備高普考,比較不會浪費時間,又能保持對程式的練習及累積作品。

  前天下了訂買了MACBOOK PRO Retina,主要是因為新款要推出,然後各大通路在降價清庫存,光PCHOME就降了六千元,我算一算還滿划得來的,反正做開發的話,不差那一點點效能,等以後做出成績來,再去考慮升級高階的機種,然後昨天機器到了,花了一天的時間熟悉及安裝開發相關的套件,最後還裝了暗黑3。

  然後今天把MACBOOK帶到工作的社區來測試,用手機3G上網,一切看起來都還滿不錯的,因為這個社區目前沒什麼住戶,而且是個小社區,我估計之後就算住戶都住進來也不會有什麼事,所以晚上的時間都可以用來看書和練習寫程式,我的目標是在年底前可以完成一支APP。

  目前的開發環境主要是架構在corona sdk上,這是朋友建議的framework,不過有些東西可能還是只能回native去開發就是了,所以我兩邊得要摸熟才行,至於APPLE的開發環境,則是要這兩個都熟了,再來碰了。