SWFのバージョンチェッカー。
最近はxmlやpngを外部ファイル化して、更新性を高める作り方当たり前になっている。
同様にswfもアニメーションパーツとして差し替えが聞くように作るわけだけど、そのアニメーションパーツはAS3.0対応してくれないのと制御がめんどくさい。本体をAS3.0で作っているから。
PNG画像なら、「200Pixel x 160Pixelのアルファつきで作ってください」と言えば、Web屋さんならだれでも対応できるわけだけど、更新ファイルがswfである場合には、出来上がったものが、確かに「ステージサイズ200Pixel x 160PixelのAS3.0」で作られたものかどうかの判断がつかない。特に、Flash以外のアプリで書き出されたものの場合は書き出した本人にもよくわからないのだ。
だからと言って「どっかのフリーのチェッカーアプリをインストールしてチェックしてください」とも言いにくい。
そんなわけで作ってみた。
loadしたファイルを確認したり – wonderfl build flash online
▼ActionScript AS3(FP10)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
package { import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.net.URLRequest; import com.bit101.components.PushButton; import flash.text.TextField; /** * ... * @author umhr */ public class Main extends Sprite { private var _tf:TextField; private var _type:String; private var _content:*; public function Main():void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; _type = ""; _tf = new TextField(); _tf.width = _tf.height = 465; _tf.multiline = true; _tf.wordWrap = true; _tf.y = 20; this.addChild(_tf); new PushButton(this, 0, 0, "Load File", onStart); } public function onStart(event:Event):void { if(event.target.label == "Load File" || _type == ""){ event.target.label = "hoge"; var loaderFile:LoadFile = new LoadFile(); loaderFile.atComplete = atComp; loaderFile.start(); event.target.label = "addChild()"; _tf.text = ""; if(_content){ this.removeChild(_content); } }else { event.target.label = "Load File"; _content.y = 20; this.addChild(_content); } } private function atComp(event:Event):void { _tf.appendText(event.target.content + "\n"); var info : LoaderInfo = event.target as LoaderInfo; _tf.appendText("MIME タイプ : " + info.contentType + "\n"); _tf.appendText("ファイルの場所 : " + info.url + "\n"); _tf.appendText("ローダーの場所 : " + info.loaderURL + "\n"); _tf.appendText("幅 : " + info.width + "\n"); _tf.appendText("高さ : " + info.height + "\n"); if(info.contentType == "application/x-shockwave-flash"){ _tf.appendText("これはSWFファイルです。" + "\n"); _tf.appendText("SWFファイルのバージョン : " + info.swfVersion + "\n"); _tf.appendText("FPS : " + info.frameRate + "\n"); _tf.appendText("ASのバージョン : " + info.actionScriptVersion + "\n"); if (info.actionScriptVersion == 3) { _type = "AS3.0"; _content = event.target.content; }else { _type = "AS1.0/2.0"; _content = event.target.content.parent; } }else if (info.contentType == "image/jpeg") { _type = "JPEG"; _tf.appendText("これはJPEGファイルです。" + "\n"); _content = event.target.content; }else if (info.contentType == "image/gif") { _type = "GIF"; _tf.appendText("これはGIFファイルです。" + "\n"); _content = event.target.content; }else{ _type = ""; _tf.appendText("これはSWFファイルではありません" + "\n"); } } } } import flash.display.Loader; import flash.events.Event; import flash.net.FileReference; import flash.system.LoaderContext; class LoadFile{ private var _fileReference:FileReference; public var atComplete:Function = function(event:Event):void{}; /** * 開始 * */ public function start():void { if(_fileReference){ return; } _fileReference = new FileReference(); _fileReference.browse(); _fileReference.addEventListener(Event.SELECT, atSelect); } /** * ファイルの選択が完了すると動く * @param event * */ private function atSelect(event:Event):void{ _fileReference.removeEventListener(Event.SELECT, atSelect); _fileReference.addEventListener(Event.COMPLETE, atFileComplete); _fileReference.load(); } /** * 選択したファイルを読み込み完了すると動く * @param event * */ private function atFileComplete(event:Event):void{ _fileReference.removeEventListener(Event.COMPLETE, atFileComplete); var loader:Loader = new Loader(); loader.loadBytes(event.target.data, new LoaderContext()); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, atBytesComplete); } /** * 読み込んだファイルのバイトアレイを変換完了で動く * @param event * */ private function atBytesComplete(event:Event):void{ event.target.removeEventListener(Event.COMPLETE, atBytesComplete); atComplete(event); } } |
1 Comment
[…] 使えるFlickr画像検索サービスhttp://www.mztm.jp/2010/11/08/load/ […]