var _this = this; _this.my_mc.my_txt.wordWrap = true; _this.my_mc.my_txt.autoSize = true; var my_load_vars = new LoadVars(); my_load_vars.onData = function(rawData) { trace('読み込み完了 : '+rawData); _this.my_mc.my_txt.html = true; _this.my_mc.my_txt.htmlText = rawData; } my_load_vars.load("data.html");
これで同じ階層の「data.html」を読み込んで表示します。
なお「data.html」の内容ですが<html>タグや<body>タグは省略します。
(これらのタグやコメントは空白改行とみなされるため)
Flash ActionScript で現在実行している .swf ファイルがローカル環境下なのかサーバー環境下なのかを判別するには…。
「URLの文字列に http:// が含まれるとサーバー環境」というロジックで判別することにします。
if ( loaderInfo.url.indexOf("http://") == 0 ){ //サーバー上 } else{ //ローカル }
if ( _url.indexOf("http://") == 0 ){ //サーバー上 } else{ //ローカル }
JavaScriptからFlash内の任意の関数を呼び出すときには以下のようにします。
まずFlash内の関数 my_func を呼び出したい場合は下記のようにして JavaScriptから呼び出す様の関数 JS_my_func を定義します。
function my_func(){ // ここに処理内容を記述 } import flash.external.ExternalInterface; ExternalInterface.addCallback("JS_my_func", _root, my_func);
JavaScript内には以下のように記述します。
function test_asfunc(){ var id ='hogehoge' var swf = document.all? window[id] : document[id]; alert(swf); ret_val = swf.JS_my_func(); // 引数を渡したければカッコ内に記述 alert(ret_val); }
<a href="#" onclick="test_asfunc();">TEST</a>
参考:http://goo.gl/0r8vh
Flashでのリキッドデザインとでも言うのでしょうか、
常に背景を画面にフィットするようウィンドウサイズ変更時に自動で画像をリサイズするサンプルは以下のとおりです。
//自動でサイズを変更しない。 Stage.scaleMode = "noScale"; //基準点をLeftTop Stage.align = "LT"; //イベントリスナーに登録。 sListener = new Object(); var _this = this; sListener.onResize = function() { // 例:my_mc のサイズを変更する var rt_array = calc_stage_match_width_height(my_mc._width, my_mc._height); my_mc._width = rt_array[0]; my_mc._height = rt_array[1]; }; Stage.addListener(sListener); // ウィンドウにマッチするサイズを返す function calc_stage_match_width_height(width, height){ var rt_array = new Array(); var rt_width = Stage.width; var rt_height = (Stage.width/width)*height; if (rt_height < Stage.height){ rt_height = Stage.height; rt_width = (Stage.height/height)*width; } rt_array[0] = rt_width; rt_array[1] = rt_height; return rt_array; } // 最初にリサイズする var rt_array = calc_stage_match_width_height(my_mc._width, my_mc._height); my_mc._width = rt_array[0]; my_mc._height = rt_array[1];
サンプルの .fla ファイルは↓からダウンロード
import flash.display.Bitmap; import flash.display.BitmapData; var my_width = copy_from_mc._width; var my_height = copy_from_mc._height; var my_bd:BitmapData; my_bd = new BitmapData(my_width, my_height, false, 0xFFFFCC00); my_bd.draw(copy_from_mc); target_mc.attachBitmap(my_bd, _root.getNextHighestDepth());
なお、同じmcにコピーするたびにメモリを使用します。
コピーされた画像は上に重なるように塗られて行きます。
なので、不要になったら削除するように心がけましょう。
またこれを行うと BitmapData オブジェクトのプロパティやメソッドにアクセスできなくなるので、また使用したい場合は再度 new BitmapData() から行います。
bd.dispose();
BitmapData
http://help.adobe.com/ja_JP/AS2LCR/Flash_10.0/help.html?content=00000787.html
あるMC(my_mc)をウィンドウ幅をリサイズされても常にステージの右下に配置するには
下記のように記述します
//自動でサイズを変更しない。 Stage.scaleMode = "noScale"; //基準点をLeftTop Stage.align = "LT"; //イベントリスナーに登録。 sListener = new Object(); var _this = this; sListener.onResize = function() { move_items(); }; Stage.addListener(sListener); function move_items(){ // my_mc var my_x = Stage.width - _this.my_mc._width; var my_y = Stage.height - _this.my_mc._height; my_mc._x = my_x; my_mc._y = my_y; } move_items();
なおこのイベントを削除するには
Stage. removeListener(sListener);
でOK。
AS2 Stageリサイズ ステージに大きさを合わせるクラス
http://icodesnippet.com/snippet/other/as2-stage
var my_color = new Color( ターゲットとなるMC ); my_color.setRGB(0xFFFFFF);
です。
今更ですが…。
イベントハンドラ タイミング MovieClip.onData ムービークリップを読み込みが終わった。 MovieClip.onDragOut このムービークリップの上でマウスダウンしたままカーソルが外へ出て再び戻った。 MovieClip.onDragOver このムービークリップの上でマウスダウンしたままカーソルが外へ出た。 MovieClip.onEnterFrame フレームが進んだ。 MovieClip.onKeyDown キーが押された。(フォーカスがあるとき) MovieClip.onKeyUp 押されたキーが上がった。(フォーカスがあるとき) MovieClip.onKillFocus このムービークリップからフォーカスが移動した。 MovieClip.onLoad ムービークリップが読み込まれて表示された。 MovieClip.onMouseDown マウスボタンが押された。 MovieClip.onMouseMove マウスカーソルが動いた。 MovieClip.onMouseUp マウスボタンが上がった。 MovieClip.onPress このムービークリップがクリックされた。(マウスダウン時) MovieClip.onRelease このムービークリップがクリックされた。(マウスアップ時) MovieClip.onReleaseOutside このムービークリップがプレスされたままカーソルが外へ出てマウスアップした。 MovieClip.onRollOut このムービークリップの外へカーソルが出た。 MovieClip.onRollOver このムービークリップの中にカーソルが入った。 MovieClip.onSetFocus このムービークリップにフォーカスが移った。 MovieClip.onUnload ムービークリップがタイムラインから消えた。
target_mc 以下のmc(ムービークリップ)を一括削除するには
ActionScript2.0
for (var key:String in target_mc) { target_mc[key].removeMovieClip(); }
ただしこれはActionScriptによって動的に追加したmc のみ削除されます。
(あらかじめステージに配置されたmcは削除されません。)
ステージ上のMCを削除するにはこちら
// ステージ上の my_mc を削除 my_mc.swapDepths(_root.getNextHighestDepth()); my_mc.removeMovieClip();
引用:http://www.trick7.com/blog/2006/04/27-115327.php
■ AS2.0
// カラのムービークリップimage_mc に画象test.jpgを読み込む // image_mc はあらかじめステージ用意しておくこと。 var cliploader_mcl = new MovieClipLoader(); var lisner_obj = new Object(); lisner_obj.onLoadInit = function(m:MovieClip){ trace(m._width); trace(m._height); m._width = 999; m._height = 999; } cliploader_mcl.addListener(lisner_obj); cliploader_mcl.loadClip("test.jpg",image_mc);
MovieClipLoaderクラスのイベントハンドラ onLoadInit 読み込みが完了し,初期設定が行える状態になったときに発生 onLoadComplete 読み込み完了時に発生。まだ大きさや幅などを取得/設定はできない onLoadError 読み込みエラーが発生したときに発生 onLoadStart 読み込み開始時に発生 onLoadProgress 読み込みプロセス中に発生
引用:http://itpro.nikkeibp.co.jp/article/COLUMN/20061018/251030/
■ flare
http://www.nowrap.de/flare.html
ダウンロードするとコマンドファイル(Macの場合はUnix実行ファイル)が出てくるので
コマンドラインから
flare hogehoge.fla
で実行すると
hogehoge.flr というテキストファイルにアクションスクリプトが抜き出されます。
ActionScript 3.0 では正規表現が標準サポートされていますが、2.0ではされていません。
でも ActionScript2.0 でも正規表現が使いたい!
というときにはこちらを利用します。
http://www.jurjans.lv/flash/RegExp.html
(RegExp_JLott.zipのリンクをクリックしてダウンロード)
// RegExp.as を使った正規表現のテスト // 半角の\マークはバックスラッシュに置き換えて下さい。 str = 'aiueo_[test]kakikukeko(abc123)DATADATA'; //型指定(:String)は記述しないこと var rObj = new RegExp('\\[test\\]'); if (str.match(rObj)) { trace("test1:含んでいます。マッチした文字列:"+RegExp.lastMatch); } else{ trace("test1:マッチしません。"); } // RegExp.as を使った正規表現のテスト // 半角の\マークはバックスラッシュに置き換えて下さい。 str = 'aiueo_[test]kakikukeko(abc123)DATADATA'; rObj = new RegExp('\\(.+\\)'); if (str.match(rObj)) { trace("test2:含んでいます。マッチした文字列:"+RegExp.lastMatch); } else{ trace("test2:マッチしません。"); }
結果
test1:含んでいます。マッチした文字列:[test] test2:含んでいます。マッチした文字列:(abc123)
ActionScript 2.0 用のダンプ関数がWEB上にあまりなかったので作成
// function _dump // Version 0.4 function _dump(data,indent:Number){ if (! indent){indent=0;} if (indent==0){ trace('------------------------- ↓'); } var space:String = ''; for (var key:String in data) { var value = data[key]; if ( typeof(value) == "object" ){ space = ''; for( var i:Number=0; i<indent*8; i++){ space += ' '; } trace( space +key+' : ('+typeof(value)+') : '+value); indent++; _dump(value,indent); indent --; } else{ space = ''; for( var i:Number=0;i<indent*8;i++){ space += ' '; } trace( space +key+' : ('+typeof(value)+') : '+value); } } if ( typeof(data) == 'string' || typeof(data) == 'number' || typeof(data) == 'boolean' || typeof(data) == 'undefined' || typeof(data) == 'null' ){ trace( '名無し'+' : ('+typeof(data)+') : '+data); } if (indent==0){ trace('------------------------- ↑'+"\n"); } }
使い方は
var obj:Object = {x:1, y: "aaa", z: {foo: [1,2,3], bar: {a: 11, b: null, c: true}}}; _dump(obj);
出力結果
------------------------- ↓ x : (number) : 1 y : (string) : aaa z : (object) : [object Object] foo : (object) : 1,2,3 2 : (number) : 3 1 : (number) : 2 0 : (number) : 1 bar : (object) : [object Object] a : (number) : 11 b : (null) : null c : (boolean) : true ------------------------- ↑
不具合などありましたらコメント欄から是非ご指摘くださいませ。
ActionScript 3.0用はこちらにありました。(こちらの方が見やすくていいかも)
http://kjirou.sakura.ne.jp/mt/2007/10/as3_1.html
こちらもAS3用
http://www.libspark.org/wiki/dealforest/Dumper
■ ActionScriptからJavaScriptのalertを利用する。
下記のように記述します。
// ActionScript 3.0 var hoge=500; import flash.external.ExternalInterface; ExternalInterface.call("function(){ javascript:alert('hoge'); }"); // ActionScript 2.0 var hoge=500; getURL("javascript:alert('"+hoge+"');");
■ FireFoxの機能拡張 FlashTracer を利用する。
https://addons.mozilla.org/ja/firefox/addon/flashtracer/
注意:debug versionのフラッシュプレイヤーが必要です。
1. /Library/Application Support/Macromedia/mm.cfg を以下の内容で作成します
ErrorReportingEnable=1 TraceOutputFileEnable=1
2. FlashTracerをインストール後ログファイルの場所を指定します。
例:ユーザー「hogehoge」の場合
:Users:hogehoge:Library:Preferences:Macromedia:Flash Player:Logs:flashlog.txt
参考:http://d.hatena.ne.jp/kasahi/20070531/1180630084
読み込み完了の関数を定義して、load()メソッドを呼べば完了。簡単です。
読み込まれるテキストデータ(test.txt)の内容(例)
テストテキストテストテキストテストテキスト
アクションに記述する内容
var my_load_vars = new LoadVars(); var _this = this; my_load_vars.onData = function(rawData) { trace('読み込み完了 : '+rawData); // 読み込みデータの表示 _this.my_txt.text = rawData; } my_load_vars.load("test.txt");
まず「テキストツール」で「ダイナミックテキスト」を作成します。
名前を「my_txt」とつけます。
これでmy_txtに外部テキストが読み込まれます。
「// 読み込みデータの表示」の次の1行を下記のように書き換えます。
// 読み込みデータの表示 _this.my_txt.html = true; _this.my_txt.htmlText = rawData;