6.02.2010

[AS3] 在IE Browser 中 stageWidth 為 0 Bug

在開發的過程中,SWFObject 在 IE Browser中瀏覽時,一直 trace stageWidth 與 stageHeight 時都會為0,而 Chrome, Firefox 似乎沒有這問題。

因此找了個方法,在 IE Browser 中使用stage的resize事件處理器,似乎就可以解決掉這個問題。以下demo不管在哪個Browser中,應該都是會置中的。

DEMO


resize程式碼如下:

this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
this.addChild(cp);

       private function onAdded(e:Event):void{
            if(stage.stageWidth > 0 && stage.stageHeight > 0){
                createChild();
            }else{
                stage.addEventListener(Event.RESIZE,onResize);
            }
        }
      
        private function onResize(e:Event):void{
            if(stage.stageWidth > 0 && stage.stageHeight > 0){
                stage.removeEventListener(Event.RESIZE, onResize);
                createChild();
            }
        }
      
        private function createChild():void{
          
            cp.stop();
            cp.x = (stage.stageWidth>>1) - (cp.width>>1);
            cp.y = (stage.stageHeight>>1) - (cp.height>>1);
        }

另外也可參考這篇原文... 
...

[Browser] Google Chrome Firebug


Firebug 功能:可即時預覽網頁、觀看網路執行狀況、DOM資訊、script偵錯等.
而Google Chrome 本身也有內建類似 Firebug 的功能.




使用方式:
  1. 滑鼠右鍵.
  2. 檢查元素(Inspect element).
  3. 就會有相類似 Firebug 的功能. (快速鍵 Ctrl + Shift + j).
或你已習慣Firebug的使用者也可使用:Firebug 擴充功能.

[AS3] "BulkLoader" 介紹

"BulkLoader"是個不錯的載入開源項目,簡化了AS3中載入不同類型資料所產生的複雜性,為不同類型內容載入提供統一的介面。

首        頁:http://www.stimuli.com.br/trane/2007/nov/25/loading-reloaded/
下載位址:http://code.google.com/p/bulk-loader/



簡單的源碼範例:
var loader : BulkLoader = new BulkLoader("main");
loader.add("bg.jpg");
loader.add("config.xml");
loader.add("soundtrack.mp3");
loader.add("intro.flv");
loader.addEventListener(BulkLoader.PROGRESS, onProgress);
loader.addEventListener(BulkLoader.COMPLETE, onComplete);
loader.start();
function onProgress(evt : BulkProgressEvent) : void{
trace(evt.percentLoaded);
}
function onComplete(evt : Event) : void{
var bgBitmap = loader.getBitmap("bg.jpg");
addChild(bgBitmap);
var video : Video = new Video();
video.attachNetStream(loader.getNetStream("intro.flv"));
parseConfig(loader.getXML("config.xml"));
}

5.26.2010

[AS3] "動畫"基本數學公式整理

Flash Actionscript 3.0動畫製作所需要的基本數學公式:

基本三角函數的計算:

角的正弦值(Sine) = 對邊 / 斜邊

角的餘弦值(Cosine) = 鄰邊 / 斜邊

角的正切值(Tangent) = 對邊 / 鄰邊

角度制與弧度制的相互轉換:

弧度 = 角度 * Math.PI / 180

角度 = 弧度 * 180 / Math.PI

計算兩點間距離:

dx = x2 – x1;

dy = y2 – y1;

dist = Math.sqrt(dx*dx + dy*dy);

緩動公式:

sprite.x += (targetX – sprite.x) * easing;//easing為緩動係數變數

sprite.y += (targetY – sprite.y) * easing;

彈性公式:

vx += (targetX – sprite.x) * spring;//spring為彈性係數

vy += (targetY – sprite.y) * spring;

sprite.x += (vx *= friction);//friction為摩擦力

sprite.y += (vy *= friction);

偏移彈性公式:

var dx:Number = sprite.x – fixedX;

var dy:Number = sprite.y – fixedY;

var angle:Number = Math.atan2(dy, dx);

var targetX:Number = fixedX + Math.cos(angle) * springLength;

var targetY:Number = fixedX + Math.sin(angle) * springLength;

向滑鼠旋轉(如撥時鐘效果等)

dx = mouseX – sprite.x;

dy = mouseY – sprite.y;

sprite.rotation = Math.atan2(dy, dx) * 180 / Math.PI;

波形運動:

public function onEnterFrame1(event:Event):void {

ball.y=centerScale+Math.sin(angle)*range;

angle+=speed; }

心跳:

public function onEnterFrame1(event:Event):void {

ball.scaleX=centerScale+Math.sin(angle)*range;

ball.scaleY=centerScale+Math.sin(angle)*range;

angle+=speed; }

圓心旋轉:

public function onEnterFrame(event:Event):void {

ball.x=centerX+Math.cos(angle)*radius;

ball.y=centerY+Math.sin(angle)*radius;

angle+=speed; }

橢圓旋轉:

public function onEnterFrame(event:Event):void {

ball.x=centerX+Math.cos(angle)*radiusX;

ball.y=centerY+Math.sin(angle)*radiusY;

angle+=speed; }

顏色運算得到透明值:

var t:uint=0×77ff8877

var s:uint=0xff000000

var h:uint=t&s

var m:uint=h>>>24

trace(m)

轉換為十進位:

trace(hexValue);

十進位轉換為十六進位:

decimalValue.toString(16)

顏色提取:

red = color24 >> 16;

green = color24 >> 8 & 0xFF;

blue = color24 & 0xFF;

alpha = color32 >> 24;

red = color32 >> 16 & 0xFF;

green = color32 >> 8 & 0xFF;

blue = color232 & 0xFF;

按位計算得到顏色值:

color24 = red <<>

color32 = alpha <<>

5.02.2010

[AS3] Flash keyCode 偵測

偵測鍵盤上的keyCode:

//場景偵聽鍵盤是否被按下
stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown);

//被按下之後執行以下的動作
function keydown(e:KeyboardEvent):void{
//trace目前被按下鍵盤的keyCode。
trace(e.keyCode);
}

當得知這些鍵盤的keyCode之後,就可以指定操作你想要做的事了。

[AS3] Flash 聲音控製(播放、停止)

匯入背景音樂,播放與停止語法教學:

1. 開啟 ADOBE FLASH 選擇 檔案→匯入→匯入至元件庫。

2. 在元件庫面板中,點選剛匯入的音樂(*.MP3)按下右鍵選擇屬性,勾選「匯出 給ACTIONSCRIPT使用」,在類別這一欄修改名稱為「music」,修改完按下確定即可。

3. 回到主場景,開啟動作面板(F9),KEY IN 以下程式碼。


source:

var snd:Sound = new music(); //為snd指定型態,連結music.

var sc:SoundChannel; //增加SOUNDCHANNEL,以便控製剛匯入的音樂。

sc = snd.play(); //指定音開一開始就播放

soun2_mc.addEventListener(MouseEvent.CLICK, onclick);

soun_mc.addEventListener(MouseEvent.CLICK, onclick2);

function onclick(e:MouseEvent):void{

if(sc){

sc.stop();

sc = null;

} //如果SC裡有音樂的話,就停止,並且移除音樂。

}

function onclick2(e:MouseEvent):void{

if(!sc) {

sc = snd.play();} //如果SC裡沒有音樂的話,就開始播放音樂。

}

[AR] Introduction to Augmented Reality with FLARToolkit

Flartoolkit intoduction