這世界掙錢真的很不容易
覺得去實習好辛苦卻又值得
感覺怎麼這麼矛盾……
從我2月6號進OysterX那天開始也過了一個禮拜了。這一個禮拜感覺好像待在精神時光屋一樣,這一週的成長幅度幾乎等於過去認真的我兩週的成長幅度。如果去掉「認真」兩個字,恐怕接近一個月的成長幅度吧。兩到四倍的速度來成長一開始的確讓我有點吃不消,可是成長後的自己真的讓我很滿意。
覺得自己有受虐傾向
Any way,一開始上班馬上就被迫學習Unity3D,我簡單做了一個投籃程式交差。當我沉浸於自己好厲害時,下一個挑戰馬上就來了!那就是Git。GitHub簡單啦!我自以為是的想……
結果人家是用GitBucket,誰在給你用人性化(智障)的GitHub
於是乎又得重新把 push, pull request, commit, 等等概念重新熟悉。然後開始操作新的工具 Source Tree。
我花了一天熟悉工具,沒錯只能用一天來熟悉工具,不能再多了!
接著隔天,我馬上接手產品開發……
好快!
挑戰一 看地球的視野不要超過一定的緯度
有了先前寫過的投籃程式控制,我想這個應該算簡單。不過我實際寫下去才發覺是得花心力下去寫的!
簡單的說,我一開始就卡關了……
例如說,我該如何讓攝影機照的位置超過北緯65度後,仍然可以將攝影機移到北緯65度以下?
我想了將近半小時,例如,讓攝影機超過65度時,就自動回到65度以下。
後來,PM說你不用這樣想啊!只要判斷是在北半球且超過65度時,鎖住攝影機上移的功能;南半球同理,不就行了嗎?
恩……我真傻,這麼簡單的問題居然想歪了。所幸我們家的PM點出這個盲點,我才能迅速解開這關。
好球啊PM!我想要一步步變得像你這麼厲害。
挑戰二 為我們的地球加上地標
這個挑戰大概比挑戰一難度還要高4倍吧!為什麼我會這樣覺得呢?因為我花了四倍的時間在解決這個問題。
這次的目標是要將地球上的城市所在位置加上一個屬於那座城市的地標圖片。例如說,我到了台北讓台北成為一個城市點,這時候台北的位置上會有一個101大樓的圖片,圖片會隨著攝影機看台北的角度和距離略做修改,讓101看起來很像站在地球上的立體物件。很簡單吧!
才怪!
按照正常人的想法,既然是站在地球上的物件,那好辦!只要有地標的經緯度,讓它轉成空間座標,直接放在地球上,角度的問題算一算應該有解。可是呢……
我們的地標要貼在2d螢幕上,不存在真正的3d空間中,這樣程式會跑比較快。
正常人真的會這樣想嗎?我這時候已經對PM有點佩服了!我認同他的說法,的確這樣算會快很多。當我們的App不用顯示城市不在螢幕內的地標,運算上省略的螢幕外的城市,超棒的!只是,小廢物我要開始閱讀人家PM的程式碼,看看人家是怎麼做到這種精湛的技術,這就花了我一天多,而且看了還不是很懂。同時,這一天多看著跟我同時間進來的Intern不斷完成被交予的任務覺得心裡超級慌。「我是不是比他們笨」的想法,時不時跑出來作祟。
幾乎荒廢的一天多後,總算在下班前能跟PM大大討論方法,我們互相交流一些想法。地標大小很簡單,用3D空間中的距離比例去縮放地標的大小就行,找一個適合縮放的函式去實現這個功能。這我有把握回到家就能寫出來,而我也確實寫出來了!困難點在旋轉的部分。PM說他希望我們App上的地標能夠像Barefoot World Atlas一樣有立體感,可是它那神奇的旋轉角度真的讓我對數學驚嘆不已,我根本看不出那是怎麼寫的!
那天討論後,我心裡已經有一點想法,而PM也有另一套想法。到底誰的方法比較接近我們想要的效果呢?想不出來怎麼辦?
兩個都實作看看吧!
實作出來的結果,想不到是我的比較好呢,嘿嘿嘿!Mocha加一分。現在旋轉是旋轉了,但是南半球地標轉的方向卻是倒過來的,No!同時,接近赤道的地標轉到螢幕中間前都歪斜得特別厲害。再來當螢幕內的城市過多時有些城市就不顯示地標,天哪!究竟怎麼會有這麼多bug,嗚嗚QQ。
慌也沒用,問題一個一個解決吧!
我在心裡喊著這個口號激勵自己,一邊看著盯著轉啊轉的地球,看看腦袋會不會迸出什麼解法。PM大大走過來,哇了一聲說,好酷喔!已經做好了嗎?不PM大大,我還沒。沒等我說出口,PM大大已經經開始玩地球了,然後上面那3個bug就發現惹……。他對第三個bug很有興趣,說個感覺跟顯示城市名稱的規則有點像,要我檢查一下。於是我又花了半天的時間沿著程式碼尋找PM口中的規則。最後總算找到,接著我把選擇顯示程式名稱跟顯示地標的規則切開來就解決城市過多時不顯示地標的bug了,萬歲!
可是最後旋轉的大魔王到底要怎麼解呢?在那個時候我已經想了兩天,似乎抓到一點感覺。我猜想,如果在螢幕中間傾斜的太厲害,那我就讓它不要轉那麼大,不就好了嗎?將算出來的傾斜角度乘上一個小於1的分數能不能夠解決呢?好像不能QQ,因為當城市轉到地球邊緣時還需要用原本算出來的角度傾斜。也就是說,這個分數必須從很小一路攀升到1。想到這裡,一個想法閃過腦海。如果我用當下傾斜的角度當分子,最大的傾斜角度當分母,這個分數不就出來了嗎?我真是太天才了!
實作完這個分數,加到函式裡,按下測試鈕看效果。我覺得效果不如預期那麼好。仔細觀察後我發現每個城市還是用同樣的速率轉,可是我希望緯度越低的地標在螢幕中間時可以轉得更慢一點。於是我直觀想到用次方的概念調整這個分數。緯度越低,這個分數就配上高次方;而緯度越高,就配上越低的次方。將程式加入這個概念後,調整好適當的參數,結果呈現還不錯,太棒了!
最後的bug是南半球的旋轉方向。我冷靜下來思考我想要的旋轉規則。假設一個城市在南緯55度的位置,那麼在它上面的地標旋轉角度要從0度到125度。可是依照我的規則它轉的方式卻是180度到125度。喔!看到這裡突然有感覺了。我是不是作個簡單的轉換就行了呢?算一下比例式,讓 [180, 125] 裡的數對應到 [0, 125] 就行了,耶!
解決!不過這時候已經是周六早上了……
可惡,我還得變更強!
現在回想,這一週上班真的很刺激,同時也很累,不過收穫很多!第一次去碰人家寫的大型程式,遇上了閱讀別人程式的困境。雖然目前看的還沒很懂,不過一步一步來應該很快就撐過去,然後很快就能上手。也謝謝我們的PM大大願意,接納我這個小廢物。在幾乎是台大生的工作環境裡,真的很容易看見自己的不足。所以就讓我默默盡力學習吧!
啊!對了,明天程式碼還得整理一下,把該切的功能再切乾淨。
明天開始又是新的一個開發循環,MochaRax加油吧!你行的!