-
[新手教程-4] Angular的主從元件開發
Continue Reading…: [新手教程-4] Angular的主從元件開發創立hero-detail元件 在前一篇新手教程3-使用angular的迴圈及判斷式等功能裡,我們在顯示selectedHero的資訊時是與列表寫在同一個頁面 但如果顯示詳細資訊的地方有需要額外拆分出來,可以在創立一個元件,並將selectedHero傳入元件 寫入hero-detail的內容 開啟檔案src/app/hero-detail/hero-detail.component.html,這邊會將selectedHero的名稱改為hero 讓元件能接受外部傳送物件進來 開啟src/app/hero-detail/hero-detail.component.ts 在hero-detail.component.ts裡面,hero一定要以@Input來宣告這個物件 而在HeroesComponent裡,則會以下面的宣告來將hero的值傳入 現在我們打開heroes.component.html,修改後的網頁內容會如下 今日練習的範例連結:live example / download example
-
[新手教程-3] 使用Angular的迴圈及判斷式等功能
Continue Reading…: [新手教程-3] 使用Angular的迴圈及判斷式等功能延續上一篇的範例: 請按此下載. 利用*ngFor來做迴圈顯示完整列表 首先開啟src/app/heroes/heroes.component.ts 設定一個變數heroes 接著開啟app.component.html,利用*ngFor來迴圈式的顯示列表內容 這時網頁上就可以看到成果如下圖: 更多資訊有關於ngFor 使用(click)來設定觸發事件 開啟src/app/heroes/heroes.component.ts,在li裡面增加click的事件 在src/app/heroes/heroes.component.ts增加處理的函數 更多資訊有關於event-binding 以條件式去增加元件的類別 打開heroes.component.html,在li內增加 [class.要增加的類別名稱]=”條件式為true時增加” 這樣當hero === selectedHero為真時,這個li就會被加上selected這個類別 接下來再到src/app/heroes/heroes.component.css設定該類別的CSS,就能突顯現在所選擇的是那一個了 .selected{ color:red; }
-
[新手教程-2] 創立Angular的元件
Continue Reading…: [新手教程-2] 創立Angular的元件使用CLI來為專案建立一個元件 用這個指令,CLI會為我們初始化一個新的元件樣版 這時我們開啟app/heroes/heroes.component.ts 只要創建元件,都必需從Angular去import Component。 而@Component則是用來定義這一個元件的相關資訊,有三個metadata selector: the components CSS element selector以及在HTML裡要宣告的TAG名稱 templateUrl: 要使用的HTML樣版位置 styleUrls: 專為這個元件設定的CSS 要注意的是,我們通常會使用export class,以方便在其他的模組裡可以import來使用 修改元件內容 打開heroes.component.ts 修改heroes.component.html,使用{{hero}}來顯示剛剛在TS檔裡定義的變數 將元件放進頁面裡 打開src/app/app.component.html 這時候就可以在頁面中看到剛剛我們所增加的內容 使用物件 創建一個Hero物件 src/app/hero.ts 打開src/app/heroes/heroes.component.ts,給予物件正確的值 顯示在heroes.component.ts所設定的值 如果希望將變數格式化 則可以使用 這個格式化的功能叫做Pipes,更多的說明請見Pipes說明 雙向繫結 Angular一個很方便的功能就是可以支持雙向繫結,使用[(ngModel)]能做到當欄位的值改變時,TS裡變數的值也同時被更改。 這個功能在做表單驗證時非常方便 詳細使用說明請見:NgModules 使用方法: 在src/app/heroes/heroes.component.html加上下面這段 接著要去app.module.ts去加上import資訊讓專案能夠使用ngModel標籤 要注意是在app.module.ts裡喔! 先import並且將FormsModule加進@ngModule的imports列表內,讓下面所有的元件都可以使用FormsModule的功能…
-
[新手教程-1] 建立一個Angular5的專案
Continue Reading…: [新手教程-1] 建立一個Angular5的專案這系列的文章為我在官網學習Angular 5時所紀錄下來的學習筆記。 原文的原始教程都可在Angular的Docs看到。 這三十天的筆記大綱預計分為新手教程、功能介紹、技術支援三個部份: 新手教程:一個最簡單的專案,用step by step的方式引導大家去做 功能介紹:一個個介紹Angular裡面各別的功能和特性 技術支援:涵蓋如何佈署、設定以及angular所使用的npm、typescript等的設定 建立專案 確認電腦已有安裝NodeJS(6.9.x以上版本)以及NPM(3.x.x以上版本) 創建專案 ng new my-app 開啟專案 cd my-app ng serve –open 編輯第一個自己的頁面 打開src/app/app.component.ts,改為 import { Component } from ‘@angular/core’; @Component({ selector: ‘app-root’, templateUrl: ‘./app.component.html’, styleUrls: [’./app.component.css’] }) export class AppComponent…
-
Starling簡報分享
Continue Reading…: Starling簡報分享Starling from Claire Chang Starling簡介 基於Stage3D技術來實作 在Flash Player 11之後的版本才能支援此技術 使用GPU做圖形的運算,讓Flash的效能能夠到之前的1000倍(官方說法)! 易學,使用跟Flash native API類似的類別,方法,架構等,讓原本熟悉Flash的開發者可以很快的上手可發布到多種平台(包括 iOS andAndroid及各種瀏覽器) 3D畫面運作原理 Flash原有的坐標系統:Global Point和Local Point 3D世界的坐標系統:世界坐標到相機坐標的轉換 3D透視變換方法 正交投影 透視投影 比較圖 Stage3D的渲染過程 VertexShader 主要作用就是3D流程中的前半段操作(對頂點進行一系列的矩陣變換) FragmentShader:對這些變換後的頂點(及流程中的光柵化部分)進行渲染 過去主要的3D技術 使用GPU的3D引擎:硬件加速(hardware acceleration) DirectX OpenGL 其他Flash3D引擎:軟件模式(software mode) Papervision3D Away3D Alternativa3D Starling的渲染方式…
-
UI進化論-行動裝置使用者介面設計
Continue Reading…: UI進化論-行動裝置使用者介面設計此文為閱讀此書的讀後心得:http://www.books.com.tw/products/0010471021 閱讀想法 這本書算是為專業的產品設計師所寫的,會講到許多有關於如何管理一個專業的設計團隊、制定開發流程、設計師頭銜討論,以及設計師如何訓練自己的藝術感等。並且也有說到一些相關電腦知識,例如掌上型行動設備的基礎知識之類。主要是以設計師的角度,去探討該如何去成為一個產品經理,然後開發一個產品。 也因為此書完全是以設計師角度去撰寫的,我是程式師,以想了解怎麼設計行動裝置的角度去看此書,很多地方會因身份角度不同而較無意義,不過或許對於設計師而言是一本很有意義的書。 重點筆記 使用者如何看待產品:這邊告訴我們使用者會怎樣看待我們的產品 合格的產品 優秀的產品 卓越的產品 如何將設計商品化 做市場需求的觀察:包括人口特徵、使用行為、利潤潛力、價值觀、需求、動機、購買因素、態度、產品使用場合、地理位置 使用者研究:目標族群的身份、使用場合、怎樣會讓使用者感覺這是個好商品、為使用者和產品間建立感情的聯繫(例如遊戲打寶,因為有感情因素,使用者會願意花時間去練功)、觀察使用者想買這個APP的目的,要能符合他們想像中的目的。 研究目標市場的文化內涵 使用者分析與研究 分析方法 當我們想要做一個行動介面的產品設計圖,除了美術的畫面及色彩設計外,對使用者的分析及研究也非常重要,這一篇是這本書裡我覺得最喜歡的,它提供我們怎麼去設計一個行動介面的動線的方式。在此介紹如下: 任務分析法:把特定的任務分成好幾個階段,先想好自己的APP想要提供給使用者那些功能,然後把特定的功能分解成多個步驟。例如像穿襯衫,可以分解為:雙手抓住襯衫領子>把襯衫披在肩上>右手穿進袖子裡,從袖口伸出>左手穿進袖子裡,從袖口伸出>把後襟拉平>把左右門襟對齊 這邊也列出一些心智模型工具:物理符號系統、諾爾曼模型、流程認知模型、SOAR模型、心智的社會模型、動力振盪理論模型、大腦協調學。 情境設定法:要包含角色和劇情。如在那邊、發生什麼事、怎樣的狀況下會想操作系統,不同情境下會需要不同的設計。例如會議中,靜音模式就很重要,或是在家裡,那就要有輕鬆、方便的感覺。 社會性研究法:研究一些社會的事件影響產品的事件。例如使用者的使用心得影響銷售的狀況、或是被影響等等。理解不同地域、文化背景、社會環境中的介面風格。 範例:MP3播放器 定義產品功能:明確定義出產品要有的功能有那些 繪製互動設計流程圖: 繪製介面原型:最簡單的版面元件位置配置 視覺設計:先設定APP主要要使用的色彩有那些(先配色),然後再繪製介面細節 如何讓圖型介面更有創意 更人性化 情感化因素不可忽視:應該要從美學本能和功能主義的瓶頸中跳脫,營造一種感覺,這種感覺能讓使用者把產品和品牌連繫在一起 互動特效的引入 產品=體驗=品牌 臨場的體驗決定購買意願 視覺設計的原則 介面清楚明瞭 讓機器幫助記憶,減少短期記憶的負擔 依賴認知而非記憶。例如列印圖示的記憶等 提供視覺線索 完善的視覺清晰度 介面的協調一致:如手機介面的按鈕排放、左鍵肯定右鍵否定或內容擺放位置 色彩與內容:整體設計不要超過五的色系,相近的色系表示相似的意思 制定設計流程…
-
Intro to Artificial Intelligence
Continue Reading…: Intro to Artificial Intelligence課程網址:https://www.udacity.com/course/viewer#!/c-cs271 什麼是Intelligent Agent 人工智能代理(Agent)根據環境的感知器(下圖的Sensors)傳入的資料,經過一連串的映設函數(紅箭頭部份),藉由效應器對環境做影響(下圖Actuators)。在裡面紅色箭頭部份是最重要的課題,這稱為代理控制策略。 如上圖這樣的一個決策過程會重覆進行很多次,從環境將資訊透過Sensors傳給Agent,經過代理做出決定,然後用Actuators影響環境,這樣的一個周期稱為perception action cycle。 AI應用範疇 財務金融:應用環境可以在股票市場、債卷市場或期貨市場,感知到一些東西的資訊和相關新聞,決策則是買入和賣出。 機器人學:這個是研究時間最長的一門ai領域,他的Sensors及Actuators都是與物理環境交互,而更為特殊。 遊戲:分兩種,一種是與人類對戰,像是象棋對戰,對Agent來說玩家是環境,它必需觀察玩家的動作,目的是戰勝玩家。另一種是遊戲情境模擬,為了要讓遊戲更自然,讓玩家感覺遊戲世界像真實世界般。 醫藥學:可以用在終身醫療上,輸入過去病史,讓它可以幫助判斷未來可能出現的疾病。 WEB應用:像智能搜索,對語意進行判定,然後幫助找出可能更符合使用者想要的搜尋結果。 術語介紹 完全可觀察的環境 vs 部份可觀察的環境(partially) 完全可觀察:例如一些牌類遊戲,當所有牌都已被掀開在桌子上,我們可以看到所有的資訊,可以算出最佳解答。 部份可觀察:像另一些紙牌遊戲,有些牌是掀開的,有些則是未被掀開的。這時就要去觀察並記憶過去曾有的牌型紀錄,和桌上現有的牌,來推算可能是最有利的出牌方式。越多的歷史紀錄可以幫助Agent去做出更正確的推斷。這個循環稱為馬爾可夫模型(Markov Model),我們會廣泛的討論要如何具有下面的這種結構: 確定性環境 vs 隨機性環境(stochastic) 確定性環境:Agent所做的結果會產生的影響是否確定。例如像在象棋遊戲中,移動一個棋子的效果是完全可預見的。 隨機性環境:像是大富翁的擲骰子遊戲,雖然所做的決定會影響結果,但是我們無法預期骰子會擲出多少,因此無法完全預見所做決策會影響到的效果。 離散環境 vs 連續環境(continuous) 離散環境:有有限多個選擇和可能性,例如象棋遊戲。 連續環境:可做的行動或可能性是無限的,例如丟飛鏢會有無限種角度的可能性與加速方式 良性環境 vs 敵對環境(adversarial):環境因素的存在與影響是否剛好與我們所要達成的目標相反? AI的不確定性 包括感知器的有限、很多時候會忽略掉某些不重要或無法判別的因素、敵對因素的影響、隨機性環境的不可預測因素、可計算的步數有限性等…。而AI的存在就是在處理並控制不確定性以供做出決策的規則。 定義問題 初始狀態:一開始的狀態 動作狀態:若當Agent處於該狀態時會有那幾種可能性(返回一組該狀態可做行動的序列) 結果狀態:一個狀態和一個動作為輸入,一個新的狀態為輸出 目標測試函數:是否這個狀態是可達成目標的。…
-
產生TextureAtlas素材的方式
Continue Reading…: 產生TextureAtlas素材的方式方法一、使用TexturePacker 軟體官網:http://www.codeandweb.com/texturepacker 範例圖檔下載:woman 首先,要先把圖檔整理成多個png圖檔,若是連續的圖檔,則需要在後面加0001~~XXXX之類的數字,固定是四個數字。若是單一圖檔則可以不用加。到時在取圖檔時,例如本範例是woman0001~woman0028,則只需要用woman當前置詞就可以取出全部的動態圖檔了 var woman:MovieClip = new MovieClip(atlas.getTextures("woman"),30); 而在操作TexturePacker時,最重要的是Data Format要選擇Sparrow/Starling。 索取TexturePacker免費序號 免費序號申請單:http://www.codeandweb.com/request-free-license 首先要說一下這套軟體的開發者真的很用心,當時看到有Blog說如果是有部落格的開發者,可以寫信去申請免費序號。我寫了申請表後,他回信了這封信給我: Hi Claire, Here’s your license key for TexturePacker: TP-xxxxxxxxxxxxxxxx I’ve added a license for PhysicsEditor (see file attached) in case you might want to try it…
-
Starling的Display Objects介紹(五)
Continue Reading…: Starling的Display Objects介紹(五)上一篇:Starling的Display Objects介紹(四) 下一篇:產生TextureAtlas素材的方式 這篇會介紹starling.display.MovieClip以及starling.animation.Juggler MovieClip物件介紹 官方手冊在此:http://doc.starling-framework.org/core/starling/display/MovieClip.html 在Starling裡面的MovieClip和原生的MovieClip差異蠻大的,列舉說明如下: 每一個MovieClip都可設定不同的fps(需在new MovieClip時指定):這是因為一般來說在Starling裡的frameRate都會設定的很高,但動畫可能不會有這麼多圖片可跑,因此每一個MovieClip 由一連串的連續圖檔組成:MovieClip是由一連串的動畫圖片(TextureAtlas)輪流播放。 MovieClip裡面無法有任何物件:在Starling裡的MovieClip並不是繼承DisplayObjectContainer,而是繼承於Image,因此無法addChild()。我們可以想像MovieClip在Starling裡是一個Image下面放著一張很大的png,然後有一個方型遮罩,不停的變換顯示的區塊。 動畫效果必需由Juggler驅動:在Starling裡所有的動畫物件都必需實作IAnimatable這個介面。而所有的動畫效果則統一由Juggler驅動(另外還包括Tween、DelayedCall)。 沒有frameLabel的概念(這部份有些Starling extension有加上去此功能) 當isComplete等於true時會停止動畫的播放 順便介紹兩個好用的method。第一個為setFrameDuration(),可以另外再設定某個影格的停留時間,影格數從0開始。而setFrameSound()可以設定播放到某影格時播放一個聲音檔。 連續圖檔的產生方式請見此文章:產生TextureAtlas的方式 Juggler物件介紹 官方手冊在此:http://doc.starling-framework.org/core/starling/animation/Juggler.html 介紹在此:http://grayliao.blogspot.tw/2011/11/starling-framework6jugglertweendelaycal.html Juggle是個簡單的Class,用來控制動畫的進行。他負責管理經由add()加進來的實現IAnimatable介面的物件,然後當Juggler的advanceTime()被呼叫時,它會負責去呼叫這些IAnimatable的advanceTime(),讓動畫進行下去;而當某個IAnimatable到達complete狀態時,則會被Juggler踢出去。我們就只要負責每個frame去呼叫Juggler的advanceTime()就好。而Starling class裡有個預設的juggler,當Starling.current正在運行時,Starling.juggler在每個frame時會自動被呼叫advanceTime()。通常我們把遊戲裡的動畫加到Starling.juggler裡,而一些特殊的動畫,例如遊戲暫停時要撥放的動畫,再加到另一個我們新增的Juggler,然後每個frame去呼叫它的advanceTime()。這裡講的每個frame,我們是使用EnterFrameEvent.ENTER_FRAME,而不是Event.ENTER_FRAME,因為EnterFrameEvent可以取得passedTime,這個passTime是指跟上一次事件發生經過的時間,可以傳給Juggle的advanceTime()的第一個參數。用經過時間來播放動畫,這樣就不會受frame數不穩定而影響動畫撥放的時間。 而要實現IAnimatable介面,只要實作advanceTime()這個方法,並且要設定一個complete條件,當達到這個條件時將自己的isComplete設為true,這樣就可以自動被Juggle移除。 簡單的MovieClip範例 因為在Starling裡面,不論是MovieClip或是Button,都是正方形的。若要去判別透明,將透明的Touch事件設為無效,都需要去覆寫原有的類別裡的hitTest函數,以最原始的BitmapData的hitTest去判別是否為透明圖層。 這邊有一個已寫好的類別:AlphaMovieClip,已經寫好將透明圖層的所有hitTest事件設為無效。若有這個需求的人可以使用此類別來應用。下面是一個我寫的簡單應用範例,可點此下載原始檔:StarlingTest StarlingTest.as package { import flash.display.Sprite; import starling.core.Starling; [SWF(frameRate="60",Width="800",Height="600")] public class StarlingTest extends Sprite {…
-
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的方塊的簡單範例: package { import starling.display.Quad; import…
Search
About Me
17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。
如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!