2013年4月25日 星期四

AS3 Sound管理


自己寫的AS3 sound音效物件

用法:
 // 建立音效物件,如果播放完畢要做處理的話,可以加入cbFunc
  var audio:Audio = new Audio(cbFunc);
//撥放AS連結的音效檔
 audio.playSound("test.mp3");
//重複播放
audio.repeat = true;
//設定音量(0~1)
audio.setSoundVolume(0.5);

 程式碼
------------------------------------------------------------------------------------------------

package com.matis.media
{
import flash.events.Event;
import flash.media.*;
import flash.utils.getDefinitionByName;

public class Audio
{
private var snd:Sound = new Sound();
private var sndCh:SoundChannel;
private var audio:Object;
private var soundVolume:Number;
public var repeat:Boolean;
public var mute:Boolean;
private var parent:Sprite;
private var callback:Function;
private var sndName:String;
public function Audio(_cb:Function)
{
callback = _cb;
setSoundVolume();
}


public function setSoundVolume(_soundVolume:Number = 0.7):void{
soundVolume = _soundVolume;
if(sndCh != null){
var stf:SoundTransform = sndCh.soundTransform;
stf.volume = soundVolume;
sndCh.soundTransform = stf;
}
}


public function stop():void{
if(sndCh != null)
sndCh.stop();
}


public function play(_repeat:Boolean = false):void{
repeat = _repeat;
if(sndCh != null){
sndCh = snd.play(0,1);
sndCh.addEventListener(Event.SOUND_COMPLETE , onPlayOver);
}


}


private function onPlayOver(e:Event):void{
if(repeat){
if(sndCh != null){
sndCh = snd.play(0,1);
var stf:SoundTransform = sndCh.soundTransform;
stf.volume = soundVolume;
sndCh.soundTransform = stf;
sndCh.addEventListener(Event.SOUND_COMPLETE , onPlayOver);
}else
trace("sndCh == null");
}
if(callback != null)
callback();

}



/**撥放音效
* @param sndId 音效類別名稱
* */
public function playSound(sndId:String):void{
if(!mute){
if(sndCh != null && sndName == sndId){
sndCh.stop();
sndCh.removeEventListener(Event.SOUND_COMPLETE , onPlayOver);
sndCh = snd.play(0 , 1);
var stf:SoundTransform = sndCh.soundTransform;
stf.volume = soundVolume;
sndCh.soundTransform = stf;
sndCh.addEventListener(Event.SOUND_COMPLETE , onPlayOver);
}else
setSound(sndId);
}else{
if(sndCh != null)
sndCh.stop();
}
}


public function setSound(sndId:String):void{
var LoadClass:Class = getDefinitionByName(sndId) as Class;
sndName = sndId;
if(LoadClass != null){
var sndObj:Sound = Sound(new LoadClass());
if(sndObj != null){
snd = sndObj;
sndCh = snd.play(0,1);
sndCh.addEventListener(Event.SOUND_COMPLETE , onPlayOver);
var stf:SoundTransform = sndCh.soundTransform;
stf.volume = soundVolume;
sndCh.soundTransform = stf;
}else
trace("Audio","Not found:" + sndId + "讀取音效資源為空值.");
}else{
trace("資源名稱:" + sndId + " 讀取音效資源檔失敗.");
}
}
}
}

2013年1月29日 星期二

Flash AIR撥打電話或是開啟簡訊頁面


網址:
http://help.adobe.com/zh_TW/FlashPlatform/reference/actionscript/3/flash/net/package.html#navigateToURL()

下列範例會說明使用特定數字啟動裝置電話撥號程式的語法。
var request:URLRequest = new URLRequest( "tel:+5555555555" );
navigateToURL( request );

下列範例會說明使用特定收件者啟動裝置文字訊息應用程式的語法。
var request:URLRequest = new URLRequest( "sms:+5555555555" );
navigateToURL( request );

下列範例會說明啟動 Android Market 應用程式的語法。搜尋參數會設定為尋找 Flash Player 應用程式。
var request:URLRequest = new URLRequest( "market://search?q=pname:com.adobe.flashplayer" );

2013年1月25日 星期五

Google map 經緯度轉換成地址

Google map 經緯度轉換成地址
只需要將GPS座標帶入並且設定好語系,就可以回傳地址資訊

API文件位置:
https://developers.google.com/maps/documentation/geocoding/#ReverseGeocoding

測試網址:
http://maps.googleapis.com/maps/api/geocode/json?language=zh-Tw&latlng=40.714224,-73.961452&sensor=false

2012年9月17日 星期一

AS3 -SetInterval V.S. Timer 效能對照

因為工作需求,所以對SetInterval 及 Timer做記憶體及每一週期所需時間做了稍為的比較


測試結論:
1.大致上可知道Timer的記憶體用量比SetInterval來的穩定,不會因為週期數而有影響
2.不過有一個地方比較詭異,當swf的FPS設定為24所算出來的週期時間是放大值
    設定值為42 ms,週期時間換算為83.32 ms ,調整FPS後,即接近設定值
3.設定值為42 ms會有2~3 ms的誤差值,不管是哪一個模式都會有

比較過後,Timer 的記憶體用量穩定度高 , 時間誤差都一樣,所以還是case by case,不過還是推薦用Timer,畢竟記憶體爆量可不好玩


測試數據:

Timer  
初始化記憶體(M) 使用後記憶體(M)  所花時間(ms)  加總值 周期所花時間(ms) 記憶體用量(M)
    2.7890625    3.7578125    41664    500    83.328    0.96875
    2.7890625    3.75390625    41628    500    83.256    0.96484375
    2.796875    3.76171875    22240    500    44.48    0.96484375
    2.78515625    3.75    22219    500    44.438    0.96484375
    2.79296875    3.7578125    44465    1000    44.465    0.96484375
    2.7890625    3.75390625    44470    1000    44.47    0.96484375
    2.796875    3.76171875    44476    1000    44.476    0.96484375
    2.7890625    3.7578125    44510    1000    44.51    0.96875
                       
setInterval  
初始化記憶體(M) 使用後記憶體(M)  所花時間(ms)  加總值 周期所花時間(ms) 記憶體用量(M)
    2.7890625    3.75    41660    500    83.32    0.9609375
    2.78125    3.74609375    22240    500    44.48    0.96484375
    2.7890625    3.75390625    22239    500    44.478    0.96484375
    2.78125    3.75390625    44426    1000    44.426    0.97265625
    2.7890625    3.76171875    44436    1000    44.436    0.97265625
    2.79296875    3.75390625    44480    1000    44.48    0.9609375
    2.7890625    3.765625    44485    1000    44.485    0.9765625

2012年9月4日 星期二

誠徵 Flash工程師 職缺

目前公司正在徵Flash工程師,下面是職缺需求:

需求: 1~2人

工作條件:
   Flash AS3:1年經驗

工作項目:
  1.flash game開發
 
福利:
   1.教育訓練
   2.勞健保
   3.三節獎金
   4.專案獎金


如果有興趣請mail到:matis@sgd108.com

2012年7月11日 星期三

Stage3D 2D Framework測試

最近為了做效能優化,所以使用了Stage 3D來提高效能

Stage 3D是透過GPU做加速運算

因此測試了2套2D的library,一套是Starling,一套是ND2D
下面是分析
-----------------------------------------------------------------------------
1,Starling
  優點:
      1.文件資源多
      2.版本更新算快的
     
  缺點:
     1.架構龐大要運用的話需要額外包一層Class才能方便使用
     2.記憶體用量比ND2D多了7 M
-----------------------------------------------------------------------------
2.ND2D
  優點:
    1.使用記憶體量比Starling少
    2.架構簡單,也可以透過其類似的架構 (ND3D) 寫3D Game
   
  缺點:
    1.文件嚴重短缺
    2.一般設定Sprite2D的FPS設定為24讀取時會過於緩慢,需設為60,但是對系統的loading並不會有影響
   
-----------------------------------------------------------------------------
比較表:
-----------------------------------------------------------------------------
Starling
 Flash Player記憶體用量[Stats]:56M   
 CPU:12%
 GPU:5%
 GPU RAM:370M
-----------------------------------------------------------------------------
ND2D:
 Flash Player記憶體用量[Stats]:49M   
 CPU:11%
 GPU:5%
 GPU RAM:370M
 -----------------------------------------------------------------------------

結論:
   在一些國外的測試數據上Starling的效能算是前2名內,再加上其文件資源很多,對於想要學習的人比較適合學Starling
   至於ND2D,他在記憶體用量少了 7M 主要是因為他的動畫結構比較簡單,在開發上比較容易,但是文件真的很少,初學者建議先學Starling了解stage3D的概念
   再去學ND2D會比較適當