Flash / ActionScript プログラムに関する各種メモ書き:タグ「ActionScript3.0」での検索

【AS2】【AS3】Flashで現在ローカルかサーバー環境内にあるかを判別する

Flash ActionScript で現在実行している .swf ファイルがローカル環境下なのかサーバー環境下なのかを判別するには…。

「URLの文字列に http:// が含まれるとサーバー環境」というロジックで判別することにします。

【AS3.0】の場合

if ( loaderInfo.url.indexOf("http://") == 0 ){
    //サーバー上
}
else{
    //ローカル
}

【AS2】の場合

if ( _url.indexOf("http://") == 0 ){
    //サーバー上
}
else{
    //ローカル
}
No.841
03/27 15:17

edit

ActionScript2.0
ActionScript3.0

ダイナミックテキストのサイズ・カラーを変更する

ActionScript 3.0

var format = new TextFormat();
format.size = 14;		// 文字のポイントサイズ
format.color = 0xFF0000;	// 文字の色
txtField.defaultTextFormat = format;

ActionScript 2.0

var format = new TextFormat();
format.size = 14;		// 文字のポイントサイズ
format.color = 0xFF0000;	// 文字の色
txtField.setNewTextFormat(format);
No.686
04/07 19:08

edit

ActionScript3.0

Flashムービー(ActionScript3.0)からJavaScriptを実行する

■ JavaScriptを実行する方法

// javascript
import flash.external.ExternalInterface;
ExternalInterface.call("function(){ javascript:alert('test from timeline as'); }");


■ JSProxyを使う方法

JSProxy

http://d.hatena.ne.jp/secondlife/20071213/1197472257

を使うと便利です。

Flashのタイムラインアクションに以下を記述。

jsproxy.as をパブリッシュするファイルと同じフォルダに置いておく

import JSProxy;
JSProxy.proxy.$alert('JavaScript from timeline as');

■ 注意点

Windows IE6 の場合、HTML表示後に動的に生成したDOMオブジェクト内にFlashムービーを
貼り付けると、JavaScript実行時に
「NullはNullまたはオブジェクトではありません。」
というエラーが表示されるので注意。
HTMLにFlash貼り付けエリアをあらかじめ用意しておくとよい。
No.683
03/26 13:18

edit

ActionScript3.0
JavaScript

Flash(ActionScript3.0)で、swf起動時にhtmlから引数を渡す

Flashで、swf起動時にhtmlから引数を渡すには以下のようにします。(ActionScript3用)

html側で

<param name="FlashVars" value="hoge=1&fuga=2">
<embed src="hoge.swf" FlashVars="hoge=1&fuga=2" />

Flash側では

var flashVars:Object = this.loaderInfo.parameters;
var hoge:String = flashVars['hoge'];

// traceで確認
trace(hoge);

// javascriptのalertで確認
import flash.external.ExternalInterface;
ExternalInterface.call("function(){ javascript:alert('" + hoge + "'); }");

参考:http://goo.gl/IoMaQ

No.672
06/14 13:44

edit

ActionScript3.0

ActionScriptでムービークリップにフィルタをかける

ムービークリップ「my_mc」にフィルタ「ドロップシャドウ」をかける

var drop : DropShadowFilter = new DropShadowFilter();
my_mc.filters = [drop];

ムービークリップ「my_mc」のフィルタを解除する

my_mc.filters = [drop];

ムービークリップ「hoge_mc」の既存のフィルタを保存する。

// フィルタを保存
my_filters = hoge_mc.filters;

// フィルタを解除(空の配列を渡す)
hoge_mc.filters = [];

// 保存したフィルタを戻す
hoge_mc.filters = my_filters;

■ flash.filters

http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/DisplayObject.html#filters

■ フィルタの種類

http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/filters/package-detail.html




No.671
09/02 15:43

edit

ActionScript3.0

mcがステージに配置されると同時にTweenerアニメーションを実行する場合のmcのローディングを待つ方法

mcがステージに配置されると同時に Tweener アニメーションを実行する場合は

下記関数で読み込み完了を待った方がいいみたいです。

■ mc内のタイムラインアクションに以下を記述

(mc内の my_mc にエフェクトを加える場合)

// load complete
var totalBytes = this.loaderInfo.bytesTotal;
addEventListener(Event.ENTER_FRAME, loadEnterFrame);
function loadEnterFrame(eventObj:Event) {
	//trace('this mc loading ...');
	if(Object(root).loaderInfo.bytesLoaded == totalBytes) {
		// ロード完了
		//trace('this mc load complete');
		this.removeEventListener(Event.ENTER_FRAME, loadEnterFrame);
		Tweener.addTween(my_mc, {alpha:1, time:0.5, transition:"linear" });
	}
}
No.669
02/19 16:48

edit

ActionScript3.0
Tweener

AS3で外部ファイルのJSONを扱う

まずは JSON lintで JSONフォーマットの確認

http://www.jsonlint.com/

Json例

[
	{
		"title_name" : "タイトル" ,
		"data_loop" : [
			{
				"id" : 1 ,
				"text_name" : "テキスト1" 
			} ,
			{
				"id" : 2 ,
				"text_name" : "テキスト2" 
			} 
		]
	}
]

import com.adobe.serialization.json.JSON;
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
urlLoader.load(new URLRequest("news.json"));
function completeHandler(e:Event):void
{
	var json:String = URLLoader(e.currentTarget).data;
	//デコード!!
	var news:Array = JSON.decode(json);
	//中身拝見
	for(var i:int=0;i<news.length;i++)
	{
		trace(news[i].id, news[i].date, news[i].title, news[i].description);
	}
}

引用:http://feb19.jp/blog/archives/000159.php


No.664
03/26 14:37

edit

ActionScript3.0

AS3で外部クラス(外部as)からrootを参照する

AS3でrootを参照するにはまず addChild を行って

var m = new Main();
addChild(m);

から

// root を参照
trace( MovieClip(root) );

とします。

例: Main.as

package {
	// Import
	import flash.display.*;
	public class Main extends MovieClip {
		public function Main():void {
			// ここではまだ root を参照できない
			// trace(MovieClip(root).hoge);
		}
		public function test():void {
			trace(MovieClip(root).hoge);
		}
	}
}

例:test.flaの1フレーム目のフレームアクション

var hoge:String = "aaaaaaaaaaaaaaaaaaaaaaa";
var m = new Main();
addChild(m);
m.test();

addChild を使わない方法 A

1. var m = new Main( MovieClip(root) );
または var m = new Main( this );
とする。
2.Main.as のコンストラクタで引数を受け取るようにする

これでコンストラクタでも root を参照できます。

addChild を使わない方法 B

1. ステージ上に空のmcを作成(名前を「空のmc」とする)
2.「ライブラリ」>「空のmc」を右クリックして「プロパティ」
3.「リンケージ」の
 ・ActionScript用に書き出しにチェック
 ・1フレーム目に書き出しにチェック
 ・クラス名を外部 .as のクラス(Main)を指定

これで root を参照できます。


No.661
02/20 11:45

edit

ActionScript3.0

AS3 で Tweener を使う

Tweenerのダウンロード

http://code.google.com/p/tweener/

からダウンロード。ダウンロード、解凍してできた .as ファイルを

「 .fla 格納フォルダ」>「caurina」>「transitions」フォルダ内にすべて移動

Tweenerの実行

1. まず Flash内で適当なムービークリップをインスタンス名「test_mc」で作成します。

2. 次にフレームアクションに以下を記述して実行

import caurina.transitions.Tweener;
Tweener.addTween(test_mc, {x:100, y:200, time:1, transition:"linear"});

これで実行。

3. トゥイーンを削除するには

Tweener.removeAllTweens(); // 一括削除
Tweener.removeTweens( test_mc ); // 個別削除

パラメーター

x : Number	【移動先のx座標指定をします】
y : Number	【移動先のy座標指定をします】
alpha : Number	【透明度0(完全な透明)〜 1(完全な不透明)を指定します】
rotation : Number【回転角度を指定します】
_color : uint	【色を0xFFFFFFFFのように指定します】
scaleX : Number	【水平方向の拡大率です】
scaleY : Number	【垂直方向の拡大率です】
time : Number	【実行する秒数0にするとトゥイーンしません】
delay : Number	【実行までの待機時間】

useFrames : Boolean
【time設定の単位を秒にするか、フレームにするか指定しますtrueがフレームで、falseが秒ですデフォルトはfalse】
transition : String
【イージングの種類を指定しますイージングの種類は下記参照】
rounded : Boolean	【トゥイーン中のx座標、y座標を整数にするかの指定ですtrueだと整数、falseだと少数も許可しますデフォルトはfalse】
skipUpdates : Number	【レンダリングをフレーム毎に行うかの指定です0は毎フレーム行います数字を増やすとかくかくした動きになっていきますデフォルトは0】
onStart : Function
【トゥイーン開始時に指定したメソッドが呼び出されます】
onStartParams : Array
【onStartで指定したメソッドにここで指定した配列がパラメータとして渡されます】
onUpdate : Function
【トゥイーン処理でアップデートがかかる度に指定したメソッドが呼び出されます】
onUpdateParams
【onUpdateで指定したメソッドにここで指定した配列がパラメータとして渡されます】
onComplete : Function
【トゥイーン終了時に指定したメソッドが呼び出されます】
onCompleteParams :Array
【onCompleteで指定したメソッドにここで指定した配列がパラメータとして渡されます】
onOverwrite :Function
【addTweenメソッドが多重に呼び出された時に、ここで指定したメソッドが呼び出されます】
onOverwriteParams :Array
【onOverwriteで指定したメソッドにここで指定した配列がパラメータとして渡されます】

JavaScriptで Tweenr : http://tweener.ivank.net

No.659
12/09 18:15

edit

ActionScript3.0
Tweener

AS3 マウスイベント

AS3でmovieclipにマウスイベントをつけるには以下のようにする

// 「指カーソル」にする
my_mc.buttonMode = true;
		
// mouse over
my_mc.addEventListener(MouseEvent.MOUSE_OVER, function(){
	trace('mouse over');
});

// MouseEvent.ROLL_OUT にしないと movieclip が入れ子になったときに対応できない
// roll out
my_mc.addEventListener(MouseEvent.ROLL_OUT, function(){
	trace('roll out');
});

// mouse down
my_mc.addEventListener(MouseEvent.MOUSE_DOWN, function(){
	trace('クリックすると mouse down イベントを削除します');
	my_mc.removeEventListener(MouseEvent.MOUSE_DOWN,arguments.callee);
	my_mc.buttonMode = false;
});

No.658
08/23 19:50

edit

ActionScript3.0

AS3 でオブジェクトを複数の条件でソートする

AS3 でオブジェクト(ハッシュの配列)を複数の条件でソートするには sortOn メソッドを使用します。

以下サンプル

var i:Number,j:Number;
var hoge_array:Array=new Array();
var D:Object = new Object();
hoge_array = [
	{
		id:10,
		title:'aiueo',
		text:'あいうえお'
	} ,
	{
		id:10,
		title:'kakikukeko',
		text:'かきくけこ'
	} ,
	{
		id:3,
		title:'sasisuseso',
		text:'さしすせそ'
	} ,
	{
		id:99999,
		title:'tatituteto',
		text:'たちつてと'
	} ,
	{
		id:3,
		title:'naninuneno',
		text:'漢字'
	} ,
];
// ダンプ関数(AS3標準関数ではありません。)
D = new dumper3( hoge_array );
// 1(カラムidを 数値評価、降順ソート) 2(カラムtitleを 文字列評価、昇順ソート)
hoge_array.sortOn(["id","title"],[Array.DESCENDING|Array.NUMERIC,null]);
// 下記の通りにすると正しくソートされない。(文字列昇順ソートの時はnullを渡す必要がある。)
//hoge_array.sortOn(["id","title"],[Array.DESCENDING|Array.NUMERIC,]);
D = new dumper3( hoge_array );

結果

----------------------------------- ↓
0 : (object)
        id : (number) : 99999
        text : (string) : たちつてと
        title : (string) : tatituteto
1 : (object)
        id : (number) : 10
        text : (string) : あいうえお
        title : (string) : aiueo
2 : (object)
        id : (number) : 10
        text : (string) : かきくけこ
        title : (string) : kakikukeko
3 : (object)
        id : (number) : 3
        text : (string) : 漢字
        title : (string) : naninuneno
4 : (object)
        id : (number) : 3
        text : (string) : さしすせそ
        title : (string) : sasisuseso
----------------------------------- ↑
// sortOn パラメーター一覧
// Array.CASEINSENSITIVE 大文字と小文字を区別しない
// Array.DESCENDING    下向き(降順)
// Array.NUMERIC     数値評価
// Array.RETURNINDEXEDARRAY 
// メソッドを実行した配列をソートせずに、ソート結果として配列を返す。
// Array.UNIQUESORT
//オプションに4またはArray.UNIQUESORTを指定すると、配列をソートする前に配列に同じ値が混ざっていないかどうかをチェックできます。同じ値が混ざっている場合は値の並び替えを行わずに0を返します。

No.656
09/02 15:45

edit

ActionScript3.0

AS3 ブロックスコープの扱い

ActionScript3 で以下のコードはエラーとなる

for( var i:Number=0; i<3; i++){
	trace('test1');
}
for( var i:Number=0; i<2; i++){
	trace('test2');
}

以下のようにするとなおる

for( var i:Number=0; i<3; i++){
	trace('test1');
}
for( i=0; i<2; i++){
	trace('test2');
}

これはなぜかというと


ActionScriptのローカル変数は、関数単位で管理されている」

http://www.be-interactive.org/?itemid=244


 AS3 にはブロックスコープがないよ、という内容です

http://d.hatena.ne.jp/nitoyon/20090122/block_scope_abc



No.655
09/02 15:46

edit

ActionScript3.0

.fla ファイルからアクションスクリプトを抜き出す

■ flare

http://www.nowrap.de/flare.html

ダウンロードするとコマンドファイル(Macの場合はUnix実行ファイル)が出てくるので

コマンドラインから

flare hogehoge.fla

で実行すると

hogehoge.flr というテキストファイルにアクションスクリプトが抜き出されます。

No.641
08/08 12:55

edit

ActionScript2.0
ActionScript3.0

ActionScript で 本番環境でTraceを行う(FlashからJavaScriptのAlert関数を実行)

■ 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

No.514
11/22 09:46

edit

Firefox
ActionScript3.0
ActionScript2.0
JavaScript