国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

4.10.把字符當作獨立圖像處理

2024-04-27 13:51:54
字體:
來源:轉載
供稿:網友
4.10.1. 問題
我想把獨立的字符當作圖像一樣進行特效處理。
4.10.2. 解決辦法
使getCharBoundaries 方法來取得TextField 中字符的實際寬高xy 值。然后從TextField 創建一個包含你想要的字符的位圖。
4.10.3. 討論
getCharBoundaries 返回一個形容TextField 中字符索引的寬高xy 值的矩形。你可以用這個信息創建一個字符的位圖,保留它的全部可視信息,并使這些位圖看上去很真實。下面這段代碼就是處理的關鍵:
+展開
-ActionScript
char_bounds = addCharacters.getTextField().getCharBoundaries(i);
bitmapData=new BitmapData(char_bounds.width, char_bounds.height, true, 0);
matrix = new Matrix(1, 0, 0, 1, -char_bounds.x, char_bounds.y);
bitmapData.draw(addCharacters.getTextField(), matrix, nullnullnulltrue);
bitmap = new Bitmap(bitmapData);

char_bounds 對象是一個將要儲存所有這個字符相關信息的矩形。這個信息用來在創建位圖時創建一個flash.display.BitmapData 對象以便顯示在位圖內。BitmapData 的構造器接收4個參數:
+展開
-ActionScript
BitmapData(width:Number, height:Number, transparency:boolean, fillColor:Number);

現在你擁有了這個位圖對象,創建一個Matrix 來儲存那個你想捕捉的TextField 中特殊區域的信息,也就是,getCharBoundaries 方法返回的綁定了TextField 的矩形區域。這個Matrix 被傳給BitmapData draw 方法,這個方法同時也從載入的DisplayObject 中提取像素數據。當你畫完實際的位圖數據后,通過使用最新最流行的BitmapData 對象,你就可以創建一個Bitmap 對象,這個對象也同時是一個DisplayObject,可以被添加到顯示列表中。

剩下的例子就是處理TextField 中的字符循環了,對每一個字符都執行前面的操作,然后一個又一個栩栩如生的位圖對象就被創建了:
+展開
-XML
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxmlwidth="600"
height="300xmlns:cookbook="oreilly.cookbook.*">

<mx:Script>
<![CDATA[
import flash.display.Sprite;
import mx.core.UIComponent;
import flash.text.TextField;
import flash.text.TextFormat;
private var characterArray:Array = new Array();
//set up our master character index we're going to use when animating the characters
private var charIndex:int = 0;
//keep track of the final position we're going to place all the characters in
private var finalX:Number = 0;
private function addNewCharacters():void
{
render();
invalidateDisplayList();
invalidateProperties();
}
public function render():void
{
//define all the variables that we'll need
var bitmapData:BitmapData;
var bitmap:Bitmap;
var char_bounds:Rectangle;
var matrix:Matrix;
var component:UIComponent;
//get the text format and set the
//tf.defaultTextFormat = addCharacters.getTextField().defaultTextFormat;
//tf.text = addCharacters.text;
for each(component in characterArray)
{
holder.removeChild(component);
}
characterArray.length = 0;
for(var i:int=0; i<addCharacters.text.length; i++)
{
char_bounds =
addCharacters.getTextField().getCharBoundaries(i);
bitmapData=new
BitmapData(char_bounds.width,char_bounds.height,
true,0);
matrix = new Matrix(1,0,0,1,-char_bounds.x,char_bounds.y);
bitmapData.draw(addCharacters.getTextField(),
matrix, nullnull,nulltrue);
bitmap = new Bitmap(bitmapData);
component = new UIComponent();
component.width = bitmapData.width;
component.height = bitmapData.height;
component.addChild(bitmap);
holder.addChild(component);
component.x=char_bounds.x;
characterArray[i] = component;
}
holder.invalidateDisplayList();
startEffect();
}
private function startEffect():void
{
addEventListener(Event.ENTER_FRAME, moveCharacter);
}
private function moveCharacter(event:Event):void
{
var comp:UIComponent = (characterArray[charIndex] as
UIComponent);
if(comp)
{
if(comp.x < 200 - finalX)
{
(characterArray[charIndex] as Sprite).x+=2;
}
else
{
if(charIndex == characterArray.length - 1)
{
removeEventListener(Event.ENTER_FRAME,
moveCharacter);
return;
}
finalX += comp.width+2;
charIndex++;
}
}
}

]]>
</mx:Script>
<mx:HBox>
<cookbook:AccessibleTextInput id="addCharacters"
fontSize="18"/>

<mx:Button label="add characters"
click="addNewCharacters()"/>

</mx:HBox>
<mx:Canvas id="holdery="200"/>
</mx:Canvas>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙田区| 榆林市| 五指山市| 潞城市| 浦东新区| 牡丹江市| 呈贡县| 定州市| 固镇县| 施甸县| 涟源市| 江陵县| 炉霍县| 留坝县| 江达县| 博白县| 江川县| 营口市| 通江县| 肥乡县| 巴楚县| 碌曲县| 乐平市| 广汉市| 望谟县| 裕民县| 泽州县| 革吉县| 贵州省| 馆陶县| 扶余县| 河间市| 息烽县| 曲沃县| 广西| 景德镇市| 长沙市| 西安市| 五家渠市| 龙胜| 临夏市|