-
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按下的事件,可用下面的方式去監聽: 這是starling.display.Button一個簡單的使用範例: 要注意的是,在starling裡面沒有hit area的設計,因為圖片有Bounds和Frame兩個屬性,所以要確定是否是碰到bounds的話,可以覆寫原有的hitTest函數,範例如下: 若是要偵測是否碰到透明區塊,則要使用原生的BitmapData.hitTest去測試,使用方法如下: Sprite物件 Sprite官方手冊在此:http://doc.starling-framework.org/core/starling/display/Sprite.html DisplayObjectContainer官方手冊在此:http://doc.starling-framework.org/core/starling/display/DisplayObjectContainer.html 除了DisplayObjectContainer的功能以外,還多了一個flatten的屬性,這個屬性可以利用一些讓這個Sprite在播放動畫時更加的順暢,但若是開啟了flatten機制,所有之後對畫面的alpha、rotation和位置的改變都無法在畫面上被呈現。所以在使用此一屬性時要更加的小心。 Sprite一個專門用來放許多其他元件的標準容器,它可被偵聽下面這些事件: Event.ADDED: the object was added to a parent. Event.ADDED_TO_STAGE: the object was added to a parent that is connected to the stage,…
-
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 下面是一個最簡單的使用範例: 內嵌字型方式比較 在Starling裡的TextField可以用兩種方式去嵌入特殊字型,如下圖所示: 從上圖我們可以發現,原始的字體嵌入方式,在1到2的部份,將字型從ttf裡抽取出來壓成Bitmap Snapshot,這部份會需要使用到CPU來做運算。因為會多一個程序,在效能上,會比右邊的方式慢一些。Bitmap Font則是使用一份字型列表的圖檔(如下圖),去比對xml的字型資訊檔,它完全只會用到GPU的運算,在效能上優於傳統字體嵌入的方式。 字型範例下載:fontRegular 但是若我們要求字體在各種解析度都要能夠有很高的解析,由於原始的字型嵌入方式是即時將字型轉換成Bitmap圖檔,在各種大小都可以有良好的表現。而若我們想要使用不同大小的Bitmap字型,則需要在產生文字圖檔時就決定要使用那些大小的字型,而不能在執行時才決定要顯示的文字大小為何。 在下面的Bitmap Font產生工具裡都可以有設定的選項,包括要使用那些文字、字體、等等…,以及字型要叫什麼都可以在產生時設定好。 Bitmap Font產生工具 這邊有幾個可以產生Bitmap文字圖檔及.fnt檔案的工具: Glyph Designer(適用於Mac) BMFont(適用於Windows) 內嵌字型實作範例 下面我們簡介一下這兩種方式的實作方式: Standard TrueType fonts:也就是一般內嵌字型的方式,將.ttf的文字檔案直接用embed的方式嵌入swf裡。 下面是一個簡單的範例: Bitmap fonts:If you need speed or fancy font effects, use a…
-
Starling的Display Objects介紹(一)
Continue Reading…: Starling的Display Objects介紹(一)上一篇:Starling Framework簡介 下一篇:Starling的Display Objects介紹(二) Starling framework啟動方式 所有使用Starling framework的應用程式的起始點,都是由一個Starling物件,來創建整個Starling世界(Starling物件說明可見此:Starling),下面是一個最簡單的範例: Starling世界的物件樹 從官方的說明文件裡可以看到在Starling裡,畫面物件的繼承樹是長這樣的: 從上圖可看出在Starling裡面,DisplayObject是一切畫面物件的祖先,繼承於EventDispatcher。 DisplayObject物件介紹 官方手冊請見此:http://doc.starling-framework.org/core/starling/display/DisplayObject.html 這是所有物件樹的根物件,他的子孫包含像Quad、Image、MovieClip,這一邊是在做動畫影片的。另一邊像是DisplayObjectContainer則是放物件的容器,顧名思義,它可以再加入其他的DisplayObject在裡面。反向來說,在Starling世界裡面的MovieClip,是沒有辦法使用addChild的,它只能像是一個動畫影片一樣的單純被播放、控制位置、旋轉、或偵測碰撞,而無法在MovieClip裡面加入其他的MovieClip。 在Starling的DisplayObject其實只是一個abstract class,他沒有辦法被直接new出來,一定要被繼承並實作這兩個方法: 從上面的繼承樹我們可以發現MovieClip與DisplayObjectContainer是採用不一樣的碰撞偵測方法以及圖形render方式的。 在Starling裡的DisplayObject則有偵測多點觸控,以及設定物件坐標、及與不同層DisplayObjectContent的坐標轉換功能。 Stage物件介紹 官方手冊請見此:http://doc.starling-framework.org/core/starling/display/Stage.html Starling物件有它主場景物件Stage,也就是上圖的Starling.display.Stage,它和flash裡的Stage一樣,是放所有物件的母容器(The Starling stage object, which is the root of the display tree that is rendered)。 這個物件裡面只能夠有繼承於starling.display.DisplayObject的物件,而無法包含任何flash.display.DisplayObject相關的物件,這兩種類別是完全不能兼容的。雖然在Starling裡面,可以用 來加入原生flash物件,但就如我前一篇簡介所說,其實他也只是會取得flash.display.Stage的物件把元件放到裡面而已,它永遠都會被放在畫面的最上層。 Stage會在創建Starling物件時被自動創建,所以不用自己去建立它。 參考資料 The…
-
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 Main.as 全新的影格運作方式 從上面的Code來看,Flash programmer似乎會覺得好像和原本的程式幾乎一模一樣,其實這是Staring刻意希望讓程式師可以無痛學習Starling,刻意去這樣設計的。在很像的外表下,若我們使用Starling去建置我們的flash程式,不論在影格、圖形渲染方式、碰撞偵測方式、事件傳遞方式等。其實與原生程式,在根本上是完全不一樣的東西。也因為在基本概念上就有很大的不同(starling是以3D去模擬2D的環境,而原有的Flash則是完全使用CPU去做畫面的運算)。我建議所有Flash的開發者還是要以全新的角度去學習這套framework,並且要了解其根本的運作原理,這樣在操作上才不會被它與原生語言的不同之處搞混淆。 因此我們要知道,上面範例裡面的starling.display.MovieClip與原生的flash.display.MovieClip在本質上便已經是完全不同的東西了。在表現的圖層上也並不相同,下圖是圖層的示意圖: 從上圖可以看到,所有原來我們用flash.display.*去產生的畫面,一律會被放在最上面那層的『Display List』,而所有stage3D(在這裡也就是Starling)的物件則會放在它下面。另外StageVideo則是可以使用GPU去播放的影片,則會放在最下面一層。 這也可以看出,若是想要採用starling去開發你的應用程式,不太可能混合starling和原生的flash DisplayObject一起使用,因為原生的flash所產生的畫面會永遠的被放在starling之上(請見註一)。另外,若是使用starling,在嵌入swf至網頁時,一定要將wmode設成direct,starling不支援透明的嵌入方式,否則會跳出如下圖的錯誤訊息。 另外,雖然Starling很多類別的名稱或屬性都很相似,或者一樣,但用法其實也是有很大的不同。這邊是Starling的API手冊:Starling Framework Reference 註一: 我們可以利用nativeOverlay將原生的flash的displayObject放到starling的場景上。 請見下面的範例,下面範例是如何在starling裡加入可打字的文字框的方式。 因為starling的textField本身是不能直接設定為可打字的,因此如果想要在場景上加一個可輸入文字的文字欄位,這邊有很詳細的方法介紹:Text Input with Starling framework。 不過要注意,使用nativeOverlay所加進場景裡的物件,也是永遠會在最上層。下面是官網對於Native overlay的說明: Sometimes…
-
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檔案所使用的編碼錯誤,會出現如下錯誤 後來我雖然把檔案改成utf-8,還是一直跑出同樣的錯誤。 後來才發現,如果有錯誤,要先把終端機關掉再打開,才會再一次執行。 接下來,如果要更新Podfile,到終端機打入 就可以了! 投影片另外有講到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 時,請勿忽略錯誤訊息。OpenSSL 即使產生錯誤訊息,可能仍會輸出檔案。但這些檔案可能無法使用。如果發生錯誤,請檢查您的語法並重新執行命令。 在命令列輸入以下命令以建立 CSR 檔: 以您自己的值取代電子郵件地址、CN (憑證名稱)…
-
自適網頁RWD開發心得
Continue Reading…: 自適網頁RWD開發心得最近大家有發現部落格的樣子隨著日子在偷偷的改變嗎? 是的!最近我在進行部落格的版面小修改! 主要訴求是要將版面改版成具有專業感、清楚、易讀, 然後呀,本部落格現在開始支援Responsive Web Design囉!(灑花~~灑花!! 其實自適網頁說穿了,只是用多組的CSS,可以在不同瀏覽環境下切換畫面的CSS, 這可以讓同一個網頁在手機以及電腦上,呈現不一樣的樣子。 RWD一般最常見是使用media queries,利用條件設定去設定裡面所設定的CSS要在何種狀況被使用。 我的開發心得 那這次的改版過程中,下面幾點是我覺得在開發RWD時要去注意的 若有需要使用JS去做網頁動態,不要將CSS直接在JS裡面加,例如 類似上面的這種的作法都要通通避免,JS一定要避免掉所有和版面有關的設定。 像上面這種寫法,應改成: 這樣可以避免在切換為不同顯示方式時彼此互鄉干擾到。 CSS選擇器的優先順序: 因為在套用時,會有共通的、在某些解析度才要使用的CSS設定。 假如當今天總共有四種不同瀏覽裝置有四種不同版面,其中想在某一種特別的裝置上套用一系列不同的CSS(只是改字體什麼等)。會需要更清楚的了解各種選擇方法在執行時的優先順序,才能用不同的選擇器去覆蓋原有設定。 這邊有關於選擇器優先順序的詳細說明:如何撰寫有效率的CSS選擇器(CSS Selector) HTML格式架構: 因為要應付多種的CSS套版,HTML的格式設計就很重要,應要能夠清楚表達各元素之間的子從關係,並且符合W3C的規範,這樣子在換CSS時才可以順利在不更改HTML的狀況下去更動顯示方式。 Media Queries設定方式 直接分成不同的CSS檔案,在HTML載入時宣告此CSS作用的對象 在CSS檔裡面設定作用對象 條件的用法 @media [media type] and [(media feature)] 例:如果視窗最小寬度為500px,就套用這些CSS @media screen and (min-width:500px) {…..}…
-
[2013-GDC]製作一個全球熱銷的遊戲
Continue Reading…: [2013-GDC]製作一個全球熱銷的遊戲這是第一天下午的第一場演講 講者相關資訊 講者:Tap4Fun創意總監 Charlie Moseley Email:charlie!@tap4fun.com Twitter:@justcharlie 我的小小心得 這一場演講的講者,主要是在開發手機的APP遊戲。 手機遊戲由於可以很容易的在世界各國上架,在行銷費用不足的前提下,多一個市場就等於多一個機會,很多時候,你的遊戲會在那一個國家突然紅起來,其實是很難預測的。因此他們建議盡量要選擇一個適合在全世界都可以發行的主題來做遊戲發想。 首先他們講到的是文化,應該要選擇世界各國的人都較能了解的文化做為遊戲背景。 在最後在地化的地方,他有講一句話我很喜歡:【當你的團隊裡,有越多不同屬性的人聚集在一起,你的團隊就會更強大】。他鼓勵不同國家、不同語言、不同文化的人一起共事,並認為這會讓整個團隊更加強大。我覺得這是開發遊戲非常重要的一個重點【兼容】,我們必須放開心胸去接受更多與我們不同的背景與知識,這樣我們才可以變得更加強壯。(並且可以發想的遊戲類型也會更多) 如何發想一個國際化的遊戲 Creating concepts可以有很多創意,喜歡簡單、直觀的概念。概念越簡單越好。 概念要簡單(Simple ideas) 可以用一句話形容這個GAME 在新舊概念、熟悉與不熟間取得一個平衡(創新與熟悉的平衡) 最大挑戰:怎麼吸引所有文化的人(要了解不同文化的交集在那邊,是否有文化偏見,是否有別人不熟悉的文化背景)。例如創意來自文化或歷史,像美國禁酒時代的故事,但這段歷史很多人不了解。 以成功的Spartan Wars這個遊戲為例,這遊戲主題為斯巴達戰役及嚴酷的訓練,因為有【300壯士】這部電影為其打了基礎,人們透過這部電影,能夠對斯巴達的文化有基礎的認識,那以此為基礎的遊戲也才容易被使用者所接受。 關於歷史的東西對於國際市場會較難推動(除了有該文化的國家外會不能了解),因此要檢視人們對於這些概念可以激起一些火花,文化高速公路讓大家可以理解並感受到這些概念。 自己一定要愛自己所做的事和遊戲,如果不是很愛,就繼續找下一個idea,很多好的概念不會被實現。不要擔心失敗也不要擔心失敗了會如何,失敗的教訓是很重要的。 賈伯斯說:”The only way to do great work is to love what you do. If you haven’t…
Search
About Me
17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。
如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!