2011年2月24日 星期四

第2次AS讀書會

http://www.facebook.com/event.php?eid=153597431365750

時間 3月8日 · 19:00 - 21:00
地點 未定
召集人 Flash/Flex/AS精武讀書會
詳情
主題:progression
講者:Gray http://www.facebook.com/gray.liao

主題:FlashDevelop在專案上的應用
講者:奶綠茶 http://www.facebook.com/milkmidi

有興趣的朋友可以多多參加

FlashAS3 TextField link

大家好,我是奶綠茶
flash裡的動態文字類別有個 link 的 event 可以使用
直接看程式碼
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/TextField.html
轉載請註明出處
public function TextFieldDemo()  {   
   var _tf:TextField = new TextField;
   _tf.htmlText = "點我milkmidi";
   _tf.addEventListener(TextEvent.LINK , _linkHandler);
   this.addChild( _tf );
  
  }  
  
  private function _linkHandler(e:TextEvent):void {
   trace(e.text);
  }  
使用方法只要在動態文字上使用 htmlText 屬性
然後在 href='event:' 這是固定寫法, 面後再加上你要出現的文字
這樣就可以了,好處是這樣就可以透過 XML 的方法,來決解文字點擊後要做什麼事

另類用法,如果希望動態文字 Over 後 直接出現手指滑鼠的話, 以前的做法需要多包一層 Sprite
現在可以用這樣寫
tf.htmlText = "點我milkmidi";
給他一個空的就可以
Enjoy it

2011年2月10日 星期四

FlashPlayer10.2 StageVideo 試玩心得

FP10.2 正式發怖啦,
這次最主要的新功能, 就是 StageVideo 類別
Adobe 官網教學與介紹
線上Preview
StageVideo API Reference

說明一下使用方法:
一樣是使用 NetStream 連線
之前的版本是使用 Video 類別, attachNetStream( NetStream );
改成對 StageVideo attachNetStream, 其他的偵聽進度與播放停止等功能, 都和之前一樣。

想要嘗鮮的同學你需要

Flex 4.5 SDK – build 4.5.0.18623 available

解開後找到 xxxx\frameworks\libs\player
目前只有10.2的資料,copy一份,並命名為10.1, 這樣是為了讓目前的flashdevelop版本能夠發怖
開啟flashdevelop, 在 Properties 面版 Compiler Options裡的 Additional Compiler Options
加入 -swf-version=11
這樣就可以發怖成功了。




轉載請註明出處
package  {
package  {
 import flash.display.*;
 import flash.events.*;
 import flash.geom.*;
 import flash.media.*;
 import flash.net.*;
 //import net.hires.debug.*;
 /**
  * ...
  * @author milkmidi
  */
 public class StageVideoDemo extends Sprite {
  // youtube Iron Man2
  private static const VIDEO_URL:String = "http://v1.lscache7.c.youtube.com/videoplayback?" +
  "sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass%2Coc%3AU0dYTFNST19FSkNNOF9LTFNH&" +
  "fexp=908607&itag=37&ipbits=0&signature=53BA5F94D1C8D46E51D5C571F5A7F5D4BFF56844" +
  ".BEC86A8A482EC4B39B068AD5359A6F1C8D487566&sver=3&ratebypass=yes&expire" +
  "=1297371600&key=yt1&ip=0.0.0.0&id=b224200fda8e851b&begin=112292";
  private var sv:StageVideo;
  public function StageVideoDemo() {      
   if (stage) init();
   else  addEventListener(Event.ADDED_TO_STAGE , init);   
  }  
  private function init(e:Event = null):void {   
   removeEventListener(Event.ADDED_TO_STAGE, init);   
   stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, onStageVideoState)  
   stage.scaleMode = StageScaleMode.NO_SCALE;
   stage.align = StageAlign.TOP_LEFT;   
   stage.addEventListener(Event.RESIZE , resizeHandler);   
   //addChild(new Stats);
  }
  private function onStageVideoState(e:StageVideoAvailabilityEvent):void {
   var _available:Boolean = (e.availability == StageVideoAvailability.AVAILABLE);
   trace(e,_available);
   var nc:NetConnection = new NetConnection();
   nc.connect(null);
   var ns:NetStream = new NetStream(nc);
   ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
   ns.client = {
    onMetaData:function( o:Object ):void {
     //trace(o.duration);
     resizeHandler();
    }
   };
   
   var v:Vector. = stage.stageVideos;          
   if ( v.length >= 1 ) {       
    sv = v[0];       
   }
   sv.addEventListener(StageVideoEvent.RENDER_STATE, stageVideoStateChange);     
   sv.attachNetStream(ns);
   ns.play(VIDEO_URL);   
  }
  
  private function stageVideoStateChange(e:StageVideoEvent):void {
   trace(e);
  }
  
  
  private function resizeHandler (e:Event = null):void  { 
   sv.viewPort = getVideoRect(sv.videoWidth, sv.videoHeight);   
  }
  /**
   * 等比縮放, centerInside
   * @param pWidth
   * @param pHeight
   * @return
   */
  private function getVideoRect(pWidth:uint, pHeight:uint):Rectangle { 
   var _sw    :int = stage.stageWidth;
   var _sh    :int = stage.stageHeight;
   
   var _videoWidth  :uint = pWidth;
   var _videoHeight :uint = pHeight;
   var _scaling  :Number = Math.min ( _sw / _videoWidth, _sh / _videoHeight );
   
   _videoWidth  *= _scaling;
   _videoHeight *= _scaling;
   
   var _posX:uint = _sw - _videoWidth >> 1;
   var _posY:uint = _sh - _videoHeight >> 1;
   
   var _videoRect:Rectangle = new Rectangle();
   _videoRect.x = _posX;
   _videoRect.y = _posY;
   _videoRect.width = _videoWidth;
   _videoRect.height = _videoHeight;
   
   return _videoRect;
  }
  private function onNetStatus(e:NetStatusEvent):void {
   trace(e);
  }
 }

}