日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

as3中得到swf文件中的链接名字

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 as3中得到swf文件中的链接名字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前自己寫編輯器的時候需要讀取一個flash生成的swf文件 然后得到swf中的鏈接名字

就是這個樣子,然后我從網上找了好多例子都沒有很好的,最后用swf的文件結構實現了讀取swf中鏈接的工具

今天有一個朋友也遇到了這個需求,處于方便寫篇帖子,以后有需要的朋友都可以參考下

AnalysisSwf.as類

package

{ ??
import flash.display.ActionScriptVersion;
import flash.display.Bitmap;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.utils.Endian;

import flashx.textLayout.elements.InlineGraphicElement;

/**
*解析swf文件鏈接 ?
*@author 七公子_崛
*/
public class AnalysisSwf extends Sprite
{ ??


private static var intance:AnalysisSwf;
public static function getInstance():AnalysisSwf{
if(!intance) intance = new AnalysisSwf();
return intance;
}
private var _swfByteArray:ByteArray = new ByteArray;?

private const COMPRESSED:String = "CWS";?
private var _swfSize:int;?
private var _frameRate:int;?
private var _frameTotal:int;?

/***版本信息***/
private var _version:int;

/***swf中鏈接名字***/
private var _classList:Array;

/***解析完畢回調的方法***/
private var analysisCompleteFun:Function;

/***swf***/
private var swfMovieClip:MovieClip;
/***swf的在本機計算機上地址***/
private var swfPath:String;
/***用來加載swf***/
private var loader:Loader = new Loader();

public function AnalysisSwf()
{ ? ? ??
super(); ? ??
}?

/**
* 開始解析swf文件
* @param _byte ? ? ? ? ?swf二進制
* @param _fun ? ? ? ? ? 解析完畢回調方法
*/
public function startAnalysis(_byte:ByteArray,_fun:Function):void{

analysisCompleteFun = _fun;
var tempByteArray:ByteArray = _byte;
//是否 壓縮 ?
var compressed:String = tempByteArray.readUTFBytes(3);

//swf 版本
_version = tempByteArray.readByte();

//
var length:uint = tempByteArray.readUnsignedInt(); ??

tempByteArray.position = 8;?
tempByteArray.readBytes(_swfByteArray);?

if(compressed == COMPRESSED)
{
_swfByteArray.uncompress();?
} ?
_swfByteArray.endian = Endian.LITTLE_ENDIAN;
// 解析 swf 寬度 高度 數據 rect 數據
_swfSize = _swfByteArray.readUnsignedByte()>>3;

_swfByteArray.position = Math.ceil((_swfSize*4)/8+5);// 計算 rect 結束位置
trace("當前ByteArr游標",_swfByteArray.position);?
_frameRate = _swfByteArray.readShort()/256;//讀取幀頻 因為低8位是小數,所以需要除以2的8次方

_frameTotal = _swfByteArray.readShort();//讀取 總幀數

trace("compressed:",compressed,"swf_version:",_version,"frameRate:",_frameRate,"frameTotal:",_frameTotal);
parseTagType();
}

private function parseTagType():void
{ ? ??
//設置讀取數據的字節順序為倒序(以字節為單位)
_swfByteArray.endian = Endian.LITTLE_ENDIAN;?
while(_swfByteArray.bytesAvailable)
{
var tagHead:int = _swfByteArray.readShort();
var tagType:int = tagHead>>6;


//0x3F ?00111111
var tagLength:int = tagHead & 0x3F; ??
if(tagLength == 63) //如果tag 是長類型
{
tagLength = _swfByteArray.readUnsignedInt();
}
// 解析 symbolClass tag
if(tagType == 76)?
{ ??
parseSymbolClass(tagLength);?
}
else
{
_swfByteArray.position += tagLength;
}
}
} ?
private function parseSymbolClass(length:int):void
{
_classList = [];
var classNum:int = _swfByteArray.readShort();
while(classNum --)
{ ??
var classId:int = _swfByteArray.readUnsignedShort();
// trace("classId之后的位置是"+_swfByteArray.position);
var char:int = _swfByteArray.readByte();?
var name:String = "";
while(char)

{ ? ?
name += String.fromCharCode(char); ? ?
char = _swfByteArray.readByte();?
}
trace("導出類名為"+name);
_classList.push(name);
}?
analysisCompleteFun(_classList);
}

protected function waitSwf(event:Event):void
{
}
}

}


startAnalysis方法中需要傳入載入swf的二進制,然后和一個解析完畢的回調方法 ?回調方法中的參數是一個數組,里面存放了所有找到的鏈接名字

總結

以上是生活随笔為你收集整理的as3中得到swf文件中的链接名字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。