標有‘Action Script3’的文章

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應用成為可 […]

繼續閱讀...

hasEventListener()與willTrigger()區別

承上一篇介紹Event事件流的基本概念 AS3的事件傳遞機制(Event、dispatchEvent及addEventListener) 再來介紹相關的檢查函數。 hasEventListener()方法: 檢查 EventDispatcher 對象是否為有註冊這個事件的監聽器。 willTrigger()方法: 檢查是否用此 EventDispatcher 對象或其父容器是否有註冊這個事件的監聽器 hasEventListener() 與 willTrigger()的區別是:hasEventListener() 只檢查它所屬的對象 而 willTrigger() 檢查對象以及對象的父容器是否有註冊這個事件(不管capture的值)。 假如像下面這樣的物件階層來說 今天我們對stage註冊事件 stage.addEventListener(MouseEvent.CLICK, stageClick); 則檢查box的willTrigger及hasEventListener trace(box.willTrigger(MouseEvent.CLICK)); trace(box.hasEve […]

繼續閱讀...

AS3.0小數運算BUG

今天處理帶錢問題時,發現AS3的Number相減的一個問題 討論串如下 http://zengrong.net/post/1186.htm http://blog.csdn.net/bill1315/article/details/8574109 因此在撰寫程式時, 應盡量避免直接將兩個帶小數點的NUMBER做運算 而應該以整數型態做運算,運算完後再做小數點的位移 或許對一些人而言這是已知的事 但還是希望能夠分享一些自己曾遇到的錯誤以避免大家再發生相同問題~ 看下面的代碼: 1 2 3 4 var n1:Number = 0.7; var n2:Number = 0.4; trace(n1 – n2); //輸出 0.29999999999999993 簡單說,就是兩個一位小數相減,差為何不是一位小數? 經測試,乘法也有同樣的問題。 GOOGLE找到了Flex團隊的一個回覆:http://old.nabble.com/Float-number-calculation-in-AS3-td18447329.html 從回覆看,AS3的Number與JAVA或C++的double類似,採用二 […]

繼續閱讀...

AS3.0中三角函數的使用

先用Math.atan2()去求得圓的弧度 用法是弧度 = Math.atan2(x,y) x與y指的是在坐標軸上形成三角型的那個點的x,y 然後再用弧度轉角度的公式去求出角度 //弧度轉角度 var arc:Number=1 //弧度 var angle=(arc*180)/Math.PI; //角度 //角度轉弧度 var angle:Number=30 //角度 var arc=angle/180*Math.PI; //弧度 另外Math.sin、Math.cos裡面要傳入的值,則是弧度 所以若我們要算sin60的值,需要這樣去代入 Math.sin(60*Math.PI/180); 那sin = 對邊/斜邊 所以要求出對邊就是 Math.sin(60*Math.PI/180) * 斜邊 其他的亦同。 語法結構: Math.sin(數值或表達式); Math.cos(數值或表達式); Math.tan(數值或表達式); Math.asin(數值或表達式); Math.acos(數值或表達式); Math.atan(數值或表達式); Math.atan2(數值或表達式); 註:數值 […]

繼續閱讀...

AS3.0中製作直式書寫的方式

在as3.0中有 FTE可針對文字去測量其寬度、高度等 針對個別的文字去做處理 相關官網的說明可見此 http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS6C0BB8ED-2805-467a-9C71-F9D757F33FB6.html ElementFormat是定義文字的相關屬性(字型、大小、顏色等等) 然後再new一個TextElement設定文字格式和文字內容 再將其放到一個TextBlock裡面 TextBlock裡面則有許多相關的操作函數 可以對個別的文字做旋轉、定位等等 http://livedocs.adobe.com/flex/3_cn/langref/flash/text/engine/TextBlock.html 詳細的手冊說明在上面 裡面的lineRotation將角度設為九十度(TextRotation.ROTATE_90)時 文字就會呈現傳統的中文直式書寫方式呈現 下面的是將文字改為直式文字的範例程式 package { import flash.display.Sprite; impo […]

繼續閱讀...

在flex4裡用spark建置可拖動panel

在flex4裡面的spark組件的panel是沒有內建拖動的功能的 因此若我們希望這物件要可以被拖動 我們必須要去自己實做當使用者拖動topGroup的區塊時的拖動動作 範例程式碼如下: package components { import flash.events.MouseEvent; import mx.managers.DragManager; import spark.components.Group; import spark.components.Panel; /** * A simple extension of the Spark Panel component * that enables dragging. */ public class DraggablePanel extends Panel { //————————————– // Constructor //————————————– public function DraggablePanel() { s […]

繼續閱讀...

如何在flex4裡自製resize事件

首先resize事件是針對該元件大小被縮放時才會產生 所以要在根元件去監聽resize的事件 很必需注意的一點,是flex4的spark元件預設會自動無視超出範圍大小的東西 因此會發現當我們把視窗縮小時, 因為超出的大小被無視了 無法偵聽到resize事件 這時候我們要在根容器上加上 clipAndEnableScrolling=”true”屬性 這個屬性主要是告訴我們要不要自動無視超出的範圍 group的預設值是false 也就是無視他 因此我們要先將 clipAndEnableScrolling設定為true 才可以偵聽到縮小視窗的事件

繼續閱讀...

繪出圓弧

最近在試著把12個按鈕排成圓弧狀 下面是我找的一些有關於三角函數的資料 http://edscb.blogspot.com/2008/03/blog-post.html http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=53846 在as裡使用sin和cos函數都是輸入弧度 因此要先將角度用角度與弧度的轉換: radians = degrees * Math.PI / 180 degrees = radians *180 / Math.PI 去轉換後再傳進去,才可獲得正確的值 以下類別是我寫的排列函數 傳進的參數為 範例: ArrangeTool.getInstance().drawArc(100,500,100,400,canvasContent); //弧形開端、弧形結束端、水平y座標、半徑、存放要排列的物件的陣列 類別內容: package com.demo { import flash.geom.Point; public final class ArrangeTool { private stati […]

繼續閱讀...