顯示具有 TextFormat 標籤的文章。 顯示所有文章
顯示具有 TextFormat 標籤的文章。 顯示所有文章

2010年11月30日 星期二

[AS3] 亂數隨機載入外部圖檔(輪播)_每一輪不重覆

外部有6個圖檔,依亂數載入。同一輪已載入過的就不再載入。第1輪播完再播第2輪......



//991228從991130_randomPhoto_1.fla修改

import flash.display.MovieClip;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
//載入Tweener、ColorShortcuts類別
//請至以下URL下載tweener類別程式庫與說明文件
//http://code.google.com/p/tweener/
import caurina.transitions.Tweener;
import caurina.transitions.properties.ColorShortcuts;
//初始化ColorShortcuts
ColorShortcuts.init();

//****** photo陣列 - push() 加入外部圖檔檔名
var photo:Array = new Array();
photo.push("991130_p1.jpg");
photo.push("991130_p2.jpg");
photo.push("991130_p3.jpg");
photo.push("991130_p4.jpg");
photo.push("991130_p5.jpg");
photo.push("991130_p6.jpg");

//
var pNum:uint = photo.length;

//****** intervalDuration - 換圖秒數(毫秒)
//目前設為 5000豪秒,即 5 秒
var intervalDuration:Number = 5000;

//TextFormat物件設定文字格式
var aTextFormat:TextFormat = new TextFormat();
aTextFormat.size = 18;
aTextFormat.color = 0xffffff;
aTextFormat.leftMargin = 5;
aTextFormat.rightMargin = 5;
//宣告TextField文字欄位類別實體infoTextField
var infoTextField:TextField = new TextField();
infoTextField.x = 15;
infoTextField.y = 15;
infoTextField.background = true;
infoTextField.backgroundColor = 0xff2200;
infoTextField.autoSize = TextFieldAutoSize.LEFT;
//將 infoTextField 加入顯示清單
addChild(infoTextField);
//建構Loader類別實體ldr
var ldr:Loader = new Loader();
//
ini();
//
function ini():void
{
 loadPhoto();
}
//
function loadPhoto()
{
 //如果photo陣列元素都被移除掉了
 //以for迴圈重新加入各元素,即外部檔名,同初始值
 if(photo.length == 0){
  for (var i:uint=0; i < pNum; i++) { // pNum
   photo[i] = "991130_p" + String(i+1) + ".jpg";
  }
  trace("------------------------------------------");
 }
 
 //Math.random() 亂數產生0(含)~1(不含)之浮點數, 
 //乘以圖檔張數(即photo陣列長度 photo.length),會得到 0(含)~6(不含) 之符點數
 //Math.floor - 去掉小數 - 會得到0~5之正整數
 var photoRandom:uint = Math.floor(Math.random() * photo.length);
 //photo[photoRandom] - 因應亂數,做為陣列索引,指向陣列元素
 var photoURL:String = photo[photoRandom];
 //splice(起始索引, 刪除數量) - 刪除被選定的陣列元素
 //如此在每一循環載入圖檔,才不會重覆
 photo.splice(photoRandom, 1);
 trace(photoURL);
 //將photoURL所存的圖檔檔名字串指定給 infoTextField 文字欄位顯示
 infoTextField.text = photoURL;
 //setTextFormat()方法,將aTextFormat格式化物件與infoTextField文字欄位關聯
 infoTextField.setTextFormat(aTextFormat);
 //
 //Loader類別實體ldr,以load()方法載入new URLRequest()的相對網址(即圖檔檔名)
 ldr.load(new URLRequest(photoURL));
 //將Event.COMPLETE事件的偵聽程式onLoaderComplete,附加到Loader類別實體ldr的contentLoaderInfo屬性 
 ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
}

//
function onLoaderComplete(e:Event):void
{
 addChild(ldr);
 //將ldr可視物件實體,以x,y座標控制在舞台中央
 ldr.x =  (stage.stageWidth - ldr.width) / 2;
 ldr.y =  (stage.stageHeight - ldr.height) / 2;
 //呼叫漸變屬性設定函式tweenPhoto1()
 tweenPhoto1();
 //setTimeout(closure:Function, delay:Number, ... arguments):uint
 //在指定的延遲時間 (以毫秒為單位) 之後執行指定的函數
 var intervalId:uint = setTimeout(ini, intervalDuration);
}
//
function tweenPhoto1():void{
 Tweener.addTween(ldr, {alpha:0, scaleX:0.9, scaleY:0.9, time:0, onComplete:tweenPhoto2});
} 
function tweenPhoto2():void{
 Tweener.addTween(ldr, {alpha:1, scaleX:1, scaleY:1, time:1.5});
} 

◎另需參閱
指定類別檔路徑 - 以下載及設置Tweener類別庫為例 http://flash.twgogo.org/2010/12/blog-post.html

2010年11月17日 星期三

[AS3] TextField.setTextFormat(format, beginIndex, endIndex):void

setTextFormat()方法
public function setTextFormat(format:flash.text:TextFormat, beginIndex:int = -1, endIndex:int = -1):void
參數
format:flash.text:TextFormat — TextFormat 物件,包含字元和段落格式資訊。
beginIndex:int (default = -1) — 選擇性;整數,指定從零開始的索引位置,以指定想要的文字範圍的第一個字元。
endIndex:int (default = -1) — 選擇性;整數,指定想要的文字範圍後的第一個字元。依原設計,如果指定 beginIndex 和 endIndex 值,就會更新從 beginIndex 到 endIndex-1 的文字。


  
  1. my_textField.setTextFormat(textFormat:TextFormat)
    將 textFormat 的屬性套用到文字欄位中的所有文字
  2. my_textField.setTextFormat(textFormat:TextFormat, beginIndex:int)
    會將 textFormat 的屬性套用到從 beginIndex 位置開始的字元。
  3. my_textField.setTextFormat(textFormat:TextFormat, beginIndex:int, endIndex:int)
    將 textFormat 參數的屬性套用到從 beginIndex 位置到 endIndex-1 位置的文字範圍。

SWF



//
var tf1:TextField = new TextField();
tf1.autoSize = TextFieldAutoSize.LEFT;
tf1.text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
tf1.x = 50;
tf1.y = 30;
tf1.background = true;
addChild(tf1);
//
var tf2:TextField = new TextField();
tf2.autoSize = TextFieldAutoSize.LEFT;
tf2.text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
tf2.x = 50;
tf2.y = 60;
tf2.background = true;
addChild(tf2);
//
var tf3:TextField = new TextField();
tf3.autoSize = TextFieldAutoSize.LEFT;
tf3.text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
tf3.x = 50;
tf3.y = 115;
tf3.background = true;
addChild(tf3);
//
var format1:TextFormat = new TextFormat();
format1.color = 0x0000FF;
format1.font = "04b_08";
format1.size = 24;
//
var format2:TextFormat = new TextFormat();
format2.color = 0xFF2255;
format2.font = "Times New Roman";
format2.size = 36;
//
var format3:TextFormat = new TextFormat();
format3.color = 0x662255;
format3.font = "Orator Std";
format3.size = 42;
//
var startRange:int = 6;
var endRange:int = 11;
tf1.setTextFormat(format1);
tf2.setTextFormat(format2, startRange);
tf3.setTextFormat(format3, startRange, endRange);


適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__flash.text.TextField.setTextFormat()方法

2010年11月16日 星期二

[AS3]嵌入字型 - TextField.embedFonts ( 三 )_嵌入外部引入的字型資訊

public static function registerFont(font:Class):void
在全域字體清單中註冊字體類別
例:Font.registerFont(ShareFont);

※ 從主檔載入外部字型分享swf檔,嵌入外部引入的字型資訊

//registerFont()方法
//public static function registerFont(font:Class):void
//在全域字體清單中註冊字體類別,才能提供給其它檔案嵌入字型。
//參數↓
//font:Class — 您要新增至全域字體清單中的類別。


‧TextField 內的字元使用嵌入之字型 (點擊文字欄位中的文字,跳窗連結至所顯示的url)




(一)首先必須做一個元件庫中含有嵌入字型的swf檔。開一新檔名為 991115_shareFont.fla
如同  [AS3]嵌入字型 - TextField.embedFonts ( 一 ) 的說明,在元件庫新增字體


(二)按 [+] 新增字體後,到右邊選擇字型、字元範圍,填入名稱。






















(三)切換的[ActionScript]頁嵌,外框模式選[傳統],勾選[匯出給ActionScript使用、[匯出在第一影格],填入類別命名,此處為[ ShareFont ],這類別名稱在ActionScript中將被引用。*** 注意,由於這字型要分享給其它Flash檔案使用,必須在下方[共享區塊勾選[匯出給執行階段共享],並將URL欄位填入此FLA 將匯出的SWF檔名,此處為[ 991115_shareFont.swf ]。


(四}到主場景第一影格寫入以下AS,並將991115_shareFont.fla匯出為991115_shareFont.swf

//
var a = Font.enumerateFonts();
trace("991115_shareFont.swf裡的嵌入字型為 " + a[0].fontName);
//
//registerFont()方法  
//public static function registerFont(font:Class):void
//在全域字體清單中註冊字體類別
//參數↓
//font:Class — 您要新增至全域字體清單中的類別。
Font.registerFont(ShareFont);


(五)建立此例主檔 991115_TextField.embedFonts_3.fla
主場景第一影格AS3如下~

//
import flash.display.Loader;
import flash.net.URLRequest;
import flash.text.TextFormat;
import flash.text.TextField;
//
var ldr:Loader = new Loader();
//載入外部擁有字型分享資訊的swf檔
ldr.load(new URLRequest("991115_shareFont.swf"));
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, lcHandler);
//
function lcHandler(e:Event):void
{
//*******將字体清單的裝置字體設為false,所以字型清單陣列儘剩下嵌入字型
//所引入的嵌入字型只有一個
 var embededFonts:Array = Font.enumerateFonts(false);
 trace("991115_TextField.embedFonts_3.swf裡的嵌入字型為 " + embededFonts[0].fontName);
 //
 var aTextFormat:TextFormat = new TextFormat();
 //******所引入的嵌入字型只有一個,其名稱就是embededFonts[0].fontName
 aTextFormat.font = embededFonts[0].fontName;
 trace("aTextFormat.font = " + aTextFormat.font);
 aTextFormat.color = 0xffffff;
 aTextFormat.size = 24;
 aTextFormat.letterSpacing = -1;
 aTextFormat.leftMargin = 15;
 aTextFormat.rightMargin = 15
 aTextFormat.target = "_blank";
 aTextFormat.url = "http://help.adobe.com/zh_TW/Flash/CS5/AS3LR/flash/text/TextFormat.html#url";
 //
 var aTextField:TextField = new TextField();
 //*******在文字欄位實體設定embedFonts(嵌入字型)屬性為真
 aTextField.embedFonts = true;
 aTextField.multiline = true;
 aTextField.wordWrap = true;
 aTextField.background = true;
 aTextField.backgroundColor = 0xff2288;
 aTextField.x = 100;
 aTextField.y = 50;
 aTextField.width = 360;
 //aTextField.height = 200;
 aTextField.autoSize = TextFieldAutoSize.LEFT;
 aTextField.defaultTextFormat = aTextFormat;
 aTextField.text = "\n"+"http://help.adobe.com/zh_TW/Flash/CS5/AS3LR/flash/text/TextFormat.html#url"+"\n\n";
 //aTextField.setTextFormat(aTextFormat);
 addChild(aTextField);
}


適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__flash.text.Font.enumerateFonts()方法


適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__flash.text.Font.fontName屬性

適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__flash.text.Font.registerFont()方法

2010年11月15日 星期一

[AS3]嵌入字型 - TextField.embedFonts ( 二 )

TextField.embedFonts = true;
( 二 )enumerateFonts(enumerateDeviceFonts:Boolean = false):Array

enumerateDeviceFonts:Boolean (default = false) — 指出您是否要將清單限制為只有目前的可用嵌入字體。 如果此項設定為 true,便會傳回所有字體的清單 (包括裝置字體和嵌入字體兩者)。 如果此項設定為 false,則只會傳回嵌入字體的清單。

// 字型清單設為不列入裝置字體,而只列入嵌入字體。並指定給embeddedFonts 陣列
var embeddedFonts:Array = Font.enumerateFonts(false);
var tFormat:TextFormat = new TextFormat();
//嵌入字體只有一個(第一個),其參照就是embeddedFonts[0],取其fontName屬性就是嵌入字體的名稱,並指定給TextFormat類別的font屬性。
tFormat.font = embeddedFonts[0].fontName;






import flash.text.TextFormat;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.Font;
//
//enumerateFonts(enumerateDeviceFonts:Boolean = false):Array
//enumerateDeviceFonts:Boolean (default = false) — 指出您是否要將清單限制為只有目前的可用嵌入字體。 如果此項設定為 true,便會傳回所有字體的清單 (包括裝置字體和嵌入字體兩者)。 如果此項設定為 false,則只會傳回嵌入字體的清單。
//http://help.adobe.com/zh_TW/Flash/CS5/AS3LR/flash/text/Font.html#enumerateFonts()
var embeddedFonts:Array = Font.enumerateFonts(false);
//trace(embeddedFonts[0].fontName);
//Font.registerFont(MyFont1); 
//
var tFormat:TextFormat = new TextFormat();
//embeddedFonts[0].fontName
tFormat.font = embeddedFonts[0].fontName;
tFormat.size = 22;
tFormat.color = 0xffff00;
tFormat.letterSpacing = -1;

//
var tField:TextField = new TextField();
//
tField.embedFonts = true;
tField.background = true;
tField.backgroundColor = 0xaa33ff;
tField.x = 80;
tField.y = 80;
tField.autoSize = TextFieldAutoSize.LEFT;
tField.selectable = false;
tField.mouseEnabled = true;
//字型嵌入,旋轉後仍正常
tField.rotation = -10;
//
tField.defaultTextFormat = tFormat;
tField.text = "今天是Flash的一天,而且三明治很難吃。";
addChild(tField);



適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__flash.text.Font.enumerateFonts()方法

適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__flash.text.Font.fontName屬性

[AS3]嵌入字型 - TextField.embedFonts ( 一 )

TextField.embedFonts = true;
( 一 )於元件庫中新增字型、繼承Font類別而為其子類別
   於ActionScript中建構此類別實體
   var myFont1:Font = new MyFont1();


點擊白色文字欄位區域,輪替更換所嵌入的英文字型



●●●在元件庫中新增字體與設定類別●●●

●在元件庫面板裡按右鍵,點選[新增字體]










●●在[字型內嵌]面板左側上方點選 [+] 圖示按鈕,增加字體。於右側[選項]頁籤輸入自訂名稱,從[系列]下拉選單選擇欲嵌入的字型,[樣式]下拉選單則可挑選一般、斜體或粗體等。[字元範圍]的核取方塊可用來決定要嵌入哪些字元;其下的[也包括下列字元]可貼入指定嵌入的字元,本例為[Hello World],貼入後剩下[Helo Wrd],自動捨棄了重覆字元。所以,本例MyFont1只嵌入[Helo Wrd]幾個字元。MyFont2也一樣。























●●●切換到[ActionScript]頁籤。在[連結]區塊,勾選[匯出給ActionScrip使用]、[匯出在第一影格],基底類別已自動填入[flash.text.Font],在[類別]欄位填入[MyFont1],這MyFont1類別將在ActionScript中被實體化,之後並指定給TextFormat類別的font屬性。上方[外框格式],此例勾選[傳統]。



























第一影格AS3
//
var myFont1:Font = new MyFont1();
var myFont2:Font = new MyFont2();
//Font.registerFont(MyFont1);
//
var format:TextFormat = new TextFormat();
format.color = 0x336699;
format.size = 48;
format.letterSpacing=3;
format.font = myFont1.fontName;
//
var myText:TextField = new TextField();
myText.background = true;
myText.x = 110;
myText.y = 60;
myText.embedFonts = true;
myText.autoSize = TextFieldAutoSize.LEFT;
myText.antiAliasType = AntiAliasType.ADVANCED;
//
//defaultTextForma 要放在myText.text = "Hello World"之前
myText.defaultTextFormat = format;
myText.text = "Hello World";
//
myText.selectable = false;
myText.mouseEnabled = true;
addChild(myText);
//
myText.addEventListener(MouseEvent.CLICK, clickHandler);
//;
function clickHandler(e:MouseEvent):void
{
 format.font = format.font == myFont1.fontName ? (myFont2.fontName):(myFont1.fontName)
 myText.setTextFormat(format);
}


適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__flash.text.Font.fontName屬性

適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__flash.text.AntiAliasType 類別

2010年11月12日 星期五

[AS3] 在文字欄位中點擊滑鼠,垂直捲動文字 - TextField.scrollV屬性

點擊一次捲動兩行 --->  myTextField.scrollV +=2;
點擊後滑鼠取得文字欄位為焦點,可用滾輪捲動文字行


package 
{
 //
 import flash.display.Sprite;
 import flash.text.*;
 import flash.events.MouseEvent;
 //
 public class TextField_TextScrollExample_1 extends Sprite
 {
  //
  private var myTextField:TextField = new TextField  ;
  private var myText:String = "Hello world and welcome to the show. It's really nice to meet you.Take your coat off and stay a while. OK, show is over. Hope you had fun. You can go home now. Don't forget to tip your waiter. There are mints in the bowl by the door. Thank you. Please come again.";
  //
  public function TextField_TextScrollExample_1()
  {
   //
   myTextField.text = myText;
   //
   myTextField.x = 150;
   myTextField.y = 100;
   myTextField.width = 150;
   myTextField.height = 100;
   myTextField.multiline = true;
   myTextField.wordWrap = true;
   myTextField.background = true;
   myTextField.border = true;
   //
   var format:TextFormat = new TextFormat  ;
   format.font = "Times New Rpman";
   format.color = 0x000088;
   format.size = 20;
   //
   myTextField.defaultTextFormat = format;
   //setTextFormat-將format參數所指定的文字格式,套用至文字欄位中的指定文字
   //setTextFormat(format:flash.text:TextFormat, beginIndex:int = -1, endIndex:int = -1):void
   //參考http://help.adobe.com/zh_TW/Flash/CS5/AS3LR/flash/text/TextField.html#setTextFormat()
   myTextField.setTextFormat(format);
   //
   addChild(myTextField);
   //
   myTextField.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownScroll);
  }
  //
  public function mouseDownScroll(event:MouseEvent):void
  {
   //scrollV-文字欄位中文字的垂直位置
   //如果顯示的第一行是文字欄位中的第一個字行,scrollV 便會設定為1
   //參考http://help.adobe.com/zh_TW/Flash/CS5/AS3LR/flash/text/TextField.html#scrollV
   //myTextField.scrollV ++; //點擊一次捲動一行
   myTextField.scrollV +=2;  //點擊一次捲動兩行
  }
 }
}



2010年11月10日 星期三

[AS3] TextFormat 參數