跳到主要內容

發表文章

目前顯示的是 十二月, 2008的文章

好玩的物理俄羅斯方塊

好玩的物理俄羅斯方塊
跟一般的玩法不太一樣
要比賽的是看誰能把方塊推的最高
當推的越高, 平衡度就越差, 就很容易不小心就整個跨掉
目前奶小茶我的最高分是210。


也是一個很有趣的物理遊戲。
使用鍵盤的上、左、右鍵控製人物的移動
再搭配滑鼠來畫製路線讓人物行走,直到走到終點
滿有趣的

ActionScript3.0 記憶體釋放問題

大家好,我是奶綠茶
一個好的Flash作品, 除了要有美美的設計與酷炫的動態外
奶小茶我覺的更重要的應該是效能。
我們就以一個EnterFrame事件來說明好了。
在ActionScript2.0時, MovieClip的EnterFrame事件, 當該MovieClip被移除時
其事件也會自動消失。
但在ActionScript3.0, 把該MoviecClip移除, EnterFrame還是會在。
所以當你載入越多的swf檔時, 沒有把前一個swf事件都移除的話, 效能就會越來越差。
那要如何移除事件呢?
//偵聽 clip.addEventListener(事件類型:String , 偵聽者函式:Function) //取消偵聽 clip.removeEventListener(事件類型:String , 偵聽者函式:Function); 那什麼時候要取消偵聽?
通常在移除可視物件時, 就要把所有的事件都取消掉, 這樣才不會一直佔住記憶體。
可視物件有個Event.REMOVE_FROM_STAGE可以加以利用
當物件被從stage移除時, 會廣播該事件。
當偵聽者聽到時, 就把所有有註冊的事件通通取消掉。

被載入的Loaded.swf
在建構函式時就偵聽Event.ENTER_FRAME事件。
package { import flash.display.Sprite; import flash.events.Event; public class Loaded extends Sprite{ public function Loaded() { this.addEventListener(Event.ENTER_FRAME, onEventEnterFrame); } private function onEventEnterFrame(e:Event):void { trace(e); } } } 載入的主要SWF
package { import com.bit101.components.PushButton; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.Mous…

FlashAS3好書一推

最近在天龍買了一本flash ActionScript3殿堂之路
http://www.books.com.tw/exep/prod/booksfile.php?item=0010397926
是大陸的黑羽翔天所寫的
看完之後整個對ActionScript3大大了解呀
原來還有許多的小細結我沒注意到。
本書完全是程式碼和ActionScript3.0的架構說明
說明事件流, 可視物件等等的。
如果想徹底的搞懂Flash, 本書真的很值得推薦。
簡體版一本才230元台幣, 可以在天龍找到喔!

Flash10 FileSaveAndLoad

FlashPlayer10
FileReference新增了save的功能。
能直接產生一個實體的檔案讓使用者下載。
在這兒我們就來練習載入一張圖片,畫圖後,再重新另存成一張新的.jpg



除了筆者的程式碼, 還需要下載JPGEncoder編碼類別。
可以在這兒下載。
http://code.google.com/p/as3corelib/downloads/list
還有bit101作者的組件。
http://milkmidi.blogspot.com/2008/12/as3.html
需要使用FlashCS4或是FlexSDK4才能發怖成功。


package { import com.bit101.components.PushButton; //匯入bit101作者的組件包。 import com.adobe.images.JPGEncoder; //匯入JPGEncoder編碼 import flash.display.*; import flash.events.*; import flash.geom.Rectangle; import flash.text.*; import flash.net.*; import flash.utils.ByteArray; [SWF(width="800", height="600", backgroundColor="#FFFFFF", framerate="30")] public class ImageFileLoadAndSave extends Sprite { private var _file :FileReference; private var _ldr :Loader = new Loader(); public function ImageFileLoadAndSave():void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; //設定stage屬性。 this.addChild(_ldr); //將_ldr加入至目前的可視物件容器。 _ldr.y = 40; var pub1:P…

Hairtry.jp-髮型設計系統

一個線上合成的髮型設計系統
http://www.hairtry.jp/
跟我之前製作過百齡罈專案使用的是同一家的3D臉部辨示系統。
不過我一時找不到該系統公司, 如果有好事人事找到麻煩跟我說一下。


FlashDevelop3介紹

想把ActionScript3.0學好, 開發工具可是非常重要滴。
想要學好FLASH ActionScript, 一定要有一套好的開發工具
用Flash內建的編輯器嗎?, 非常的不smart, 而且在CS3版, autoformat還有一堆問題
FlashDevelop3是一套免費的小巧型程式碼編輯器,
擁有完善的程式碼提示, 也可直接將.as檔或是mxml檔發怖成.swf檔。
目前的版本為FlashDevelop3 RC1
選用flashdevelop的好處
1.自定類別,也可以有程式碼的提示(在FLASH裡只會提示內建的類別)
2.不用開啟FLASH,也可以將as或是mxml compiler成.swf(需要下載>flex SDK檔)。
3.軟體本身檔案小,開啟的速度很快。
完整功能介紹:
http://www.flashdevelop.org/wikidocs/index.php?title=Features:Completion
軟體下載:
http://www.flashdevelop.org/community/viewtopic.php?f=11&t=4041
安裝軟體前, 你的作業環境需要安裝過.net framework2.0以上版本

軟體介面:

安裝完FlashDevelop後, 還有二個動作。
1.設定類別包路徑, 這樣FlashDevelop才抓的到該類別的程式碼提示。
上方工具列的:Tools/global Classpaths

選擇ActionScript3
按下Add Classpath,新增路徑。
指定到資料夾即可。

哇, PV3D的類別程式碼提示,太讚了啦


2.設定Flex SDK檔, 才可以直接將as檔發怖成.swf格式
下載Flex SDK,可以到adobe的網站免費下載使用。
FlexSDK3
目前的版本為SDK3.2, 有三個版本可以載入, 我們選檔案最小的就可以Open Source Flex SDK
約24mb
下載完成解壓縮, 筆者放的路徑是D:\FlexSDK
選擇上方工具列Tools/Progrom settings
再選擇左方的AS3Context,右方即有個Flex SDK Location路徑可以設定
填入路徑即可。

3.新增一個專案
上方的工具列,project/new Project
選擇AS3,empty project

將你要發怖的AS檔跟其專…

PV3D Control DAE Animation

找了好久,終於找到一篇很不錯的PV3D DAE動畫教學。
該作者還寫了一個DAEMC的類別, 就把DAE當成MovieClip來使用
http://pablobandin.wordpress.com/2008/12/06/control-dae-animation/
奶小茶試了一下, 支援最新版的PV3D, 正點呀
而且還有低面數的3D Model可以下載使用
http://www.tomtallian.com/

該作者是使用3D Max來製作
還有影片教學呀。

動態文字製作mask效果

動態文字如果直接使用時間軸來製作mask



在製作階段時雖然有效果, 但發怖時後動態文字會整個消失。
決解的方法有二個:
1.對該動態文字新增一個濾鏡效果, 然後把參數調成0, 這樣看起來就像是沒有濾鏡,
我們新增一個Blur。

發怖後態動文字即可使用時間軸來mask。
2.將動態文字包在一個MovieClip裡, 然後mask也轉成MoveiClip元件。
取好實體名稱, 筆者分別取名為txt_mc和mask_mc。
下程式碼:
<br />//ActionScript2.0<br />txt_mc.setMask(mask_mc);<br />//ActionScript3.0<br />txt_mc.mask = mask_mc'<br />
這樣一樣可以有mask的效果


感謝Brian補充文章:
1. 所有遮罩與遮罩下的物件都要轉成MovieClip
2. 也都要勾選"Use runtime bitmap caching"
3. 接下來也需要用奶老師提到的script設定遮罩才會生效.
4. 需要注意的是, 多個物件不能共用一個遮罩物件. 如果有多個物件需要共用到同一個遮罩, 建議是把這多個物件再包在一個MovieClip裡.

後來發現有更快的方法:
1. 將動態文字包成一個MovieClip裡。
2. 點選被遮色的MovieClip,並在下方屬性面版勾選的"Use runtime bitmap caching"。

3. 畫個色塊, 直接使用時間軸來遮色。
3. 完成。


AS3 自定事件

ActionScript3.0事件機制非常的完善
透過偵聽函式即可以得知廣播者發出的事件。
我們希望發件事件時, 能一起把自定的參數也發送出去
這時候就要自定一個類別來繼承Event。
自定一個名為LoaderEvent的類別。
定義靜態常數字串。


package milkmidi.events{ import flash.events.Event; public class LoaderEvent extends Event { public static const LOADER_COMPLETE :String = "loaderComplete"; public static const LOADER_PROGRESS :String = "loaderProgress"; public static const LOADER_ERROR :String = "loaderError"; public var percentage:Number = 0; public function LoaderEvent(p_type:String , p_percentage:Number = 0) { super( p_type ); this.percentage = p_percentage; } } }
新增一個名為LoaderX類別繼承Loader
package milkmidi.display{ import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; import flash.system.LoaderContext; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import milkmidi.events.LoaderEvent; public class LoaderX extends Loader { public function LoaderX() { super(); this.contentLo…

線上版Photoshop

介紹幾個使用Flash製作的線上Photoshop
功能很完善
能開啟本機的檔案,編輯,存檔

http://www.sumo.fi/web


http://www.pixlr.com/app

滿版定位

這一類的網站滿常見的
主要就是偵聽Stage的onResize事件
當事件發生時,就去改變物件的座標。


<br />//AS3Code:<br />stage.scaleMode = StageScaleMode.NO_SCALE;<br />//stage縮放模式設定成不縮放。<br />stage.align = StageAlign.TOP_LEFT;<br />//stage對齊模式設定成對齊左、上方。<br />stage.addEventListener(Event.RESIZE,onStageResize);<br />//偵聽stage發出的Event.RESIZE事件。<br />onStageResize();<br />//執行onResize()。<br />function onStageResize(e:Event = null):void {<br />//之後定位的程式就可以寫在這兒<br />}<br />
原始碼下載:AS2_AS3
SourceDownload

MiniCarousel3D

小型的3DCarousel效果
奶老師寫了
AS2版本
AS3版本


FLASH10版本



共三個版本
當然FLASH10製作出來的效果最佳,因為有透視的效果
其他二個版本當然就只能使用scale來模擬。
都加入了Blur效果與影像變暗的效果。
原始碼:

解壓縮密碼:回覆文章就有密碼。
SourceCodeDownload

AS3音頻跳動效果

Flash ActionScript3.0後
已經可以抓取到mp3里的音頻資訊
這樣就可以製作出音頻跳動效果
使用的是SoundMixer類別。


程式碼:
package { import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.media.SoundTransform; import flash.net.URLRequest; import flash.utils.ByteArray; import flash.utils.Timer; import flash.text.TextField; import com.bit101.components.PushButton; [SWF(width = "400", height = "300", frameRate = "31", backgroundColor = "#000000", pageTitle = "milkmidi")] public class MySoundDemo extends Sprite { private var _bArray :ByteArray = new ByteArray(); private var _txt :TextField = new TextField(); private var _position :Number = 0; private var _sound :Sound = new Sound(); private var _channel :SoundChannel; public funct…

超好用AS3小巧型組件_minimalcomps

對於經常要Coding的我們來說
有時候需要一個Button,但又懶的畫
可以參考bit-101作者所開發的組件minimalcomps
真的很好用又好看。
筆者的很多Demo也都是用使該組件。

http://www.bit-101.com/blog/?p=1126

PV3D_DoubleSidedCompositeMaterial

PV3D目前的版本沒有辦法有雙面不同的材質
還好有熱心的網友開發DoubleSidedCompositeMaterial
可以在這兒下載該類別:
http://www.nabble.com/backface-culling-td15978730.html
下載這個檔
http://www.nabble.com/attachment/16002163/0/DoubleSidedCompositeMaterial.as
支援的PV3D版本為Papervision3D_2.0_beta_1_src 2008.08.08版本。
Papervision3D_2.0_beta_1_src 2008.08.08
使用方法很簡單
當成CompositionMaterial使用就可以了。



<br />var _colorMat:ColorMaterial = new ColorMaterial(); <br />var _wireMat:WireframeMaterial = new WireframeMaterial(); <br />_wireMat.opposite = true;<br />//這行一定要加,讓另一面的材質反轉過來。<br />var _doubleMaterial:DoubleSidedCompositeMaterial = new DoubleSidedCompositeMaterial();<br />_doubleMaterial.addMaterial(_colorMat);<br />_doubleMaterial.addMaterial(_wireMat); <br />_doubleMaterial.doubleSided = true; <br />_plane = new Plane(_doubleMaterial, 400, 400);<br />scene.addChild(_plane);<br />

Away3D_OpenCube

最近又重新的把Away3D拿出來研究一下
發現新版的Away3D效果也很不錯
有些效果在PV3D上製作不出來
相對的,PV3D有些效果Away3D也製作不出來
像奶小茶我製作的這個Demo
PV3D Plane物件不能貼雙面不同的材質(有熱心的網友有寫DoubleSidedCompositeMaterial類別)
Away3D Plane直接就可以新增另一面的材質


除了筆者的程式,還需要away3D2.2版的類別和Tweener類別
SourceCodeDownload