-
Starling的Display Objects介紹(四)
Continue Reading…: Starling的Display Objects介紹(四)上一篇:Starling的Display Objects介紹(三) 下一篇:Starling的Display Objects介紹(五) 這篇會介紹下圖裡的starling.display.Quad以及starling.display.Image Quad物件介紹 官方手冊在此:http://doc.starling-framework.org/core/starling/display/Quad.html A Quad represents a rectangle with a uniform color or a color gradient. 每一個端點都可以設定一個顏色,會呈現線性漸層。要顯示一個線性的漸變色,需要把一個色值設置給頂點0和頂點1,然後另一個顏色給頂點2和頂點3。 頂點位置是這樣安排的:: 0 – 1 | / | 2 – 3 在這個物件裡面,可以看到一個叫做mVertexData的屬性。在Starling Framework簡介的地方曾經說過,Starling是基於Stage3D而建的,關於3D渲染基礎原理請見此:3D渲染基礎原理,VertexData官方介紹。所謂3D其實是一組3維的坐標,經由矩陣轉換,將之投影到2D螢幕上,計算其在2D畫面上的2D坐標,如下圖所示: 在Starling裡面,因為是2D遊戲,則是使用正交投影的方式,直接去掉z軸的值,來將頂點坐標從3維轉至2維。但操作原理不變,這邊的則是要輸入四邊型的頂點數據。正交投影示意如下圖: 下面是產生寬高各為200,200的方塊的簡單範例: Image物件介紹 官方手冊在此:http://doc.starling-framework.org/core/starling/display/Image.html 一個圖片(Image)其實就是一個四邊形上面映射了一個紋理(Texture),以下圖來說,兩個三角形是Quad的範圍,而Texture就是藍色衣服的娃娃的PNG圖檔,代表貼圖的材質。 Image相當於Flash的Bitmap類的Starling版本。但是Starling是用Texture來代替BitmapData來為圖像提供像素數據。 要顯示一個Texture,需要把它映射到一個四邊形上,而這就是Image這個類所實現的功能。…
-
Starling的Display Objects介紹(三)
Continue Reading…: Starling的Display Objects介紹(三)上一篇:Starling的Display Objects介紹(二) 下一篇:Starling的Display Objects介紹(四) 這篇會介紹下圖裡的starling.display.Button以及starling.display.Sprite Button物件介紹 官方手冊在此:http://doc.starling-framework.org/core/starling/display/Button.html 和Flash的SimpleButton的不同點,是它只有兩個狀態的圖檔,也就是upState與downState,而沒有over的狀態。它的disabled樣式可以經由alphaWhenDisabled的屬性去設定Disabled時的圖檔透明度。 另外,按下Button會觸發的事件是Event.TRIGGERED,因此若我們要監聽一個Button按下的事件,可用下面的方式去監聽: menuContainer.addEventListener(Event.TRIGGERED, onTriggered); private function onTriggered(e:Event):void { // outputs : [object Sprite] [object Button] trace ( e.currentTarget, e.target ); // outputs : triggered! trace ("triggered!"); } 這是starling.display.Button一個簡單的使用範例: package { import flash.display.Bitmap; import…
-
Starling的Display Objects介紹(二)
Continue Reading…: Starling的Display Objects介紹(二)上一篇:Starling的Display Objects介紹(一) 下一篇:Starling的Display Objects介紹(三) 這篇會介紹下圖裡的starling.text.TextField TextField物件介紹 官方手冊請見此:http://doc.starling-framework.org/core/starling/text/TextField.html 下面是一個最簡單的使用範例: package { import starling.display.Sprite; import starling.events.Event; import starling.text.TextField; public class Game extends Sprite { public function Game() { addEventListener(Event.ADDED_TO_STAGE, onAdded); } private function onAdded (e:Event):void { // create the TextField object var…
-
Starling的Display Objects介紹(一)
Continue Reading…: Starling的Display Objects介紹(一)上一篇:Starling Framework簡介 下一篇:Starling的Display Objects介紹(二) Starling framework啟動方式 所有使用Starling framework的應用程式的起始點,都是由一個Starling物件,來創建整個Starling世界(Starling物件說明可見此:Starling),下面是一個最簡單的範例: package{ import starling.core.Starling; import starling.display.Sprite; [SWF(width="1280", height="752", frameRate="60", backgroundColor="#000000")] public class Startup extends Sprite { private var mStarling:Starling; public function Startup() { // 建立Starling物件 mStarling = new Starling(Game, stage); // start it!…
-
Starling Framework簡介
Continue Reading…: Starling Framework簡介下一篇:Starling的Display Objects介紹(一) Starling的技術基礎 Starling是基於Stage3D來實作的,因此在學習Starling之前,我建議應該要對Stage3D的特性有基礎的了解。有關於Stage3D的介紹可以看這篇文章:Stage3D運作原理。在這篇文章裡,我們可以知道Stage3D比起OpenGL及DirectX等傳統3D的APIs的優勢與劣勢。 Stage3D會依發佈平台的不同而使用不一樣的GPU運算引擎,例如在mac電腦上所使用的是OpenGL,而在Windows則會視電腦所使用的硬體設備去選擇所使用的基礎技術。值得一提的是,即使遇到不支援的硬體,Stage3D仍然可以使用軟件模式去做3D運算,只是會變得十分的緩慢。這邊有一個簡單的性能比較:Stage3D vs WebGL 性能較量 下圖是Starling的技術基礎示意圖: Starling運作模式 過去我們很容易因為Stage3D這個名字而誤會這是專門為3D而做的引擎,而不能使用在2D的技術上。3D引擎的運算與2D運算最大的差異點,在於3D畫面是由一個個三角型為基礎,去建構整個畫面。而2D的向量圖形,則是由多個頂點組合而成的複雜多邊型。 要將3D的技術使用在2D上,便是將圖片整理成png或jpg等圖片,然後將圖片視為兩個三角型去繪製物件,再加上貼材質的方式,將人物的圖片貼至範圍裡。這樣便可以利用GPU去執行它最擅長的三角型繪製以及材質貼圖的動作。 Starling簡單範例 這是一個最簡單的Starling Sample:StarlingTest StarlingTest.as package { import flash.display.Sprite; import starling.core.Starling; [SWF(frameRate="60",Width="800",Height="600")] public class StarlingTest extends Sprite { public function StarlingTest() { var star:Starling = new Starling(Main, stage);…
-
Stage3D運作原理
Continue Reading…: Stage3D運作原理本文為此文章的中文重點翻譯:How Stage3D works 3D技術的突破 在過去幾年中,開發人員已經用FLASH創造了許多3D工具,如Papervision3D,Away3D和Alternativa3D,以及所有類似的3D引擎,顯示Flash對即時3D渲染的強烈需求。 過去Flash 3D的渲染是在不使用3D硬件加速的情況下進行的。 事實上,所有在Flash Player 11之前版本的3D渲染是依靠CPU的完成,我稱之為軟件模式(software mode)。 軟件模式是緩慢的,不能用來呈現細緻的3D場景。 到目前為止,軟件模式不能渲染出我們今天3D遊戲中常見的高級的圖形效果。 隨著Flash Player 11的發布,新的可能性已被實現。 開發人員可以利用3D硬件(顯卡)加速,而不是僅僅依靠計算機的CPU渲染。在新的渲染模式中Flash可以使用一個被稱為圖形處理單元(GPU)的副處理器。 GPU是設計完全用來圖形渲染的物理硬件。Stage3D API的公佈對Flash開發者是一個重大的事件。 在Flash中使用3D加速,使許多以前不能實現的Flash遊戲和Flash應用成為可能。 回顧過往,硬件加速的來到,永遠改變了世界上3D編碼方式。 遊戲質量和複雜性成倍增加。 硬件加速使得3D遊戲畫面渲染能力大大提高,迅速的渲染複雜的模型,逼真的效果,低延遲的遊戲體驗都成為可能。 使用3D硬件加速(hardware acceleration) 3D硬件加速利用現代普通PC就包含的GPU進行渲染。 GPU完全致力於圖形渲染和呈現3D內容的任務。通過這種方法,各類軟件以及你的Flash應用程序,只需要定義一個3D場景。 通過將3D場景定義數據送到GPU,GPU就能渲染出指定場景。 這個過程比使用軟件模式(software mode)通過CPU渲染3D內容快得多。 下面我們將花點時間比較軟件模式(software mode)和硬件模式(hardware mode)渲染的差異。 一般來說3D場景定義為一組3D幾何形狀或稱網格(meshes)。 每個幾何形狀又是一組三角形,對於每個三角形,又是一個由3個頂點組成的集合。 因此,一個3D場景只需要定義一個頂點集和一些相關的渲染信息,例如紋理或頂點著色。當您使用以前的軟件模式(software mode)時,3D引擎(如Away3D)就會收到這個頂點流。 它會計算三角形的屏幕位置,然後逐個通過一些填充操作(drawTriangles(),fill()) 驅動Flash Player在舞台上顯示這些三角形。即使3D引擎編碼優秀,這個過程仍然是極其緩慢的。…
-
套件管理工具CocoaPods介紹
Continue Reading…: 套件管理工具CocoaPods介紹這是1/9的cocoaHeads裡,SuperBil分享的套件管理工具。 之前小岡也有和我推薦過這個工具,當時沒有去深入研究如何使用。 這次與會完後,便開始試著學習使用這個管理套件。(裝完後心得:天呀!實在太好用了!必裝~) 分享資料 投影片:做自己的可可豆夾 錄影檔:CocoaPods CocoaPods介紹 CocoaPods是一個管理套件的工具。 過去在開發app時,如果我們想要用一些第三方的Library,通常會要到GitHub下載專案到本地端,然後把它載入專案裡。這樣如果套件有更新時,都要手動更新,若是不同版本的ios要用到不同的library,又要手動去管理,會比較麻煩。 並且如果是直接把原始碼放到專案裡,會很容易和自己寫的code混在一起,管理和瀏覽都會較為困難。 CocoaPods就是用來管理這些第三方套件,使用CocoaPods之後,專案會變這樣: 安裝方法 這篇文章有非常詳細的方法:CocoaPods 比較要注意的是,我今天在安裝時,因為Podfile檔案所使用的編碼錯誤,會出現如下錯誤 incompatible character encodings: ASCII-8BIT and UTF-8 cocoaPods 後來我雖然把檔案改成utf-8,還是一直跑出同樣的錯誤。 後來才發現,如果有錯誤,要先把終端機關掉再打開,才會再一次執行。 接下來,如果要更新Podfile,到終端機打入 $pod update 就可以了! 投影片另外有講到podSpec,如果有在cocoaPods裡面沒有包含的Library (現有的Library可到http://cocoapods.org/去輸入函式庫的名稱找有沒有現有的) 如果沒有的話(或者是自己製作的Library),就可以自己去寫spec 這邊有教學:Specs and the Specs Repo 參考資料 CocoaPods Guide 使用CocoaPods來作iOS程序的包依賴管理
-
AutoLayout介紹
Continue Reading…: AutoLayout介紹投影片分享 Auto layout in i os 7 from Claire Chang 過去的作法… 使⽤用frame和bounds去決定物件的位置和⼤小。 使用autosizing masks 設定當畫⾯面⼤大⼩小變動時,要固定 那些值(struts)。 在view的⼤大⼩小改變時,可以偵測 super view的⼤大⼩小改變去改變物 件的寬和⾼高的值(springs)。 AUTOLAYOUT和AUTORESIZING MASK的區別 Autoresizing Mask是AutoLayout的⼦子集。 AutoLayout更多的功能 指定任意兩個view的相對位置 可指定⾮非相等約束(⼤大於或者⼩小於等) 可以設定約束的優先級 WHAT IS AUTO LAYOUT 一種基於約束的,描述性的佈局系統。 Auto Layout Is a Constraint-Based, Descriptive Layout…
-
在Windows下產生.p12及.mobileprovision
Continue Reading…: 在Windows下產生.p12及.mobileprovision在 Windows 產生憑證簽名要求 對 Windows 開發人員而言,最簡單的方法是取得 Mac 電腦上的 iPhone 開發人員憑證。不過,他們也可以在 Windows 電腦上取得憑證。首先,使用 OpenSSL 建立憑證簽名要求 (CSR 檔): 在 Windows 電腦上安裝 OpenSSL (移至http://www.openssl.org/related/binaries.html,或直接在此下載openssl-0.9.8k_X64)。 開啟 Windows 命令工作階段,然後使用 CD 命令切換至 OpenSSL bin 目錄 (例如 c:\OpenSSL\bin\)。在命令列輸入以下命令以建立專用密鑰: openssl genrsa -out mykey.key 2048 儲存此專用密鑰。您稍後將會用到它。使用 OpenSSL 時,請勿忽略錯誤訊息。OpenSSL 即使產生錯誤訊息,可能仍會輸出檔案。但這些檔案可能無法使用。如果發生錯誤,請檢查您的語法並重新執行命令。…
-
自適網頁RWD開發心得
Continue Reading…: 自適網頁RWD開發心得最近大家有發現部落格的樣子隨著日子在偷偷的改變嗎? 是的!最近我在進行部落格的版面小修改! 主要訴求是要將版面改版成具有專業感、清楚、易讀, 然後呀,本部落格現在開始支援Responsive Web Design囉!(灑花~~灑花!! 其實自適網頁說穿了,只是用多組的CSS,可以在不同瀏覽環境下切換畫面的CSS, 這可以讓同一個網頁在手機以及電腦上,呈現不一樣的樣子。 RWD一般最常見是使用media queries,利用條件設定去設定裡面所設定的CSS要在何種狀況被使用。 我的開發心得 那這次的改版過程中,下面幾點是我覺得在開發RWD時要去注意的 若有需要使用JS去做網頁動態,不要將CSS直接在JS裡面加,例如 $(".content").css("display","none");//js 類似上面的這種的作法都要通通避免,JS一定要避免掉所有和版面有關的設定。 像上面這種寫法,應改成: $(".content").addClass("display-none");//js .display-none{display:none;}/*CSS*/ 這樣可以避免在切換為不同顯示方式時彼此互鄉干擾到。 CSS選擇器的優先順序: 因為在套用時,會有共通的、在某些解析度才要使用的CSS設定。 假如當今天總共有四種不同瀏覽裝置有四種不同版面,其中想在某一種特別的裝置上套用一系列不同的CSS(只是改字體什麼等)。會需要更清楚的了解各種選擇方法在執行時的優先順序,才能用不同的選擇器去覆蓋原有設定。 這邊有關於選擇器優先順序的詳細說明:如何撰寫有效率的CSS選擇器(CSS Selector) HTML格式架構: 因為要應付多種的CSS套版,HTML的格式設計就很重要,應要能夠清楚表達各元素之間的子從關係,並且符合W3C的規範,這樣子在換CSS時才可以順利在不更改HTML的狀況下去更動顯示方式。 Media Queries設定方式 直接分成不同的CSS檔案,在HTML載入時宣告此CSS作用的對象 <link href="/style.css" rel="stylesheet" media="all and (color)" type="text/css" /> <!–?xml-stylesheet media="all and…
Search
About Me
17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。
如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!