Flash / ActionScript プログラムに関する各種メモ書き

Flashのダイナミックテキストに外部HTMLを読み込んで表示させる

1. MC 「my_mc」の中にダイナミックテキスト「my_txt」を用意します。

2. タイムラインに以下のアクションを記述します。

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>タグは省略します。

(これらのタグやコメントは空白改行とみなされるため)

No.866
11/22 09:56

edit

ActionScript2.0

flashのドロップダウンリストのデフォルト値をセットする

flashのドロップダウンリスト「myComboBox1」のデフォルト値をセット(あらかじめ選択された状態にする)するには

myComboBox1.selectedIndex = 3;

とします。

No.860
11/22 09:38

edit

【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

JavaScriptからFlash Action Script(2.0)を呼び出す

JavaScriptからFlash内の任意の関数を呼び出すときには以下のようにします。

まずFlash内の関数 my_func を呼び出したい場合は下記のようにして JavaScriptから呼び出す様の関数 JS_my_func を定義します。

.fla ファイル内に記述(AS2.0)

function my_func(){
    // ここに処理内容を記述
}
import flash.external.ExternalInterface;
ExternalInterface.addCallback("JS_my_func", _root, my_func);

JavaScript内には以下のように記述します。

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);
}

HTMLには以下のように記述します

<a href="#" onclick="test_asfunc();">TEST</a>

参考:http://goo.gl/0r8vh

No.840
03/26 14:54

edit

ActionScript2.0
JavaScript

常に背景を画面にフィットするようウィンドウサイズ変更時に自動で画像をリサイズする

Flashでのリキッドデザインとでも言うのでしょうか、

常に背景を画面にフィットするようウィンドウサイズ変更時に自動で画像をリサイズするサンプルは以下のとおりです。

背景画像(my_mc)を画面にフィットするようにするサンプル

//自動でサイズを変更しない。
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 ファイルは↓からダウンロード

添付ファイル1
No.815
08/23 20:00

edit

添付ファイル

画像
ActionScript2.0

BitmapDataオブジェクトを使って読み込んだ画像をmcヘコピーする

BitmapDataオブジェクトを使って読み込んだ画像をmcヘコピーする

copy_from_mcの画像をtarget_mc へコピーします。(AS2)

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にコピーするたびにメモリを使用します。

コピーされた画像は上に重なるように塗られて行きます。

なので、不要になったら削除するように心がけましょう。


削除するには dispose() します。同時にメモリも解放されます。

またこれを行うと BitmapData オブジェクトのプロパティやメソッドにアクセスできなくなるので、また使用したい場合は再度 new BitmapData() から行います。

bd.dispose();

BitmapData

http://help.adobe.com/ja_JP/AS2LCR/Flash_10.0/help.html?content=00000787.html

No.814
08/11 14:58

edit

ActionScript2.0
画像

あるMCを(ウィンドウ幅をリサイズされても)常にステージの右下に配置する

あるMC(my_mc)をウィンドウ幅をリサイズされても常にステージの右下に配置するには

下記のように記述します

ウィンドウサイズ変更時にイベントを登録(as2)

//自動でサイズを変更しない。
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

No.809
07/28 17:34

edit

ActionScript2.0
Tweener

ActionScript2 でムービークリップの色を変更する

AS2

var my_color = new Color( ターゲットとなるMC );
my_color.setRGB(0xFFFFFF);

です。

No.807
07/05 10:16

edit

ActionScript2.0

ActionScript2 のムービークリップイベント

今更ですが…。

イベントハンドラ     タイミング
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 ムービークリップがタイムラインから消えた。
No.806
07/21 11:13

edit

ActionScript2.0

重なった下のムービークリップをクリックさせないようにする。

A と B という二つのmc(ムービークリップ)があって、AがBの上の位置しているとき、

Aに隠れているBのボタン等も押すことが出来てしまいます。

そこでAのmcの一番下のレイヤーにカラのmcをセット

タイムラインのアクションを以下のように記述します

this.useHandCursor = false;   // ハンドカーソルにならないように。
this.onRelease = function(){} // 空のマウスイベントを指定。

これで重なって下になっているmcのボタンなどは押せなくなります。

http://d.hatena.ne.jp/octech/20080218/1203350491

No.803
07/12 12:02

edit

あるムービークリップ以下の全てのムービークリップを一括削除する

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

No.799
07/07 13:45

edit

ActionScript2.0

読み込んだ画象(外部jpeg)の読み込み完了を検知し、width , height を取得、リサイズする

■ 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/

No.770
05/18 20:00

edit

ActionScript2.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ムービーの重なり順(z-index)をdhtmlより下にする

flashムービーの重なり順(z-index)をdhtmlより下にするには

<embed src="xxxx.swf" wmode="transparent" />
<param name="wmode" value="transparent"/>

とすればOK。

No.678
03/24 15:24

edit

連想配列(オブジェクト)の配列 をランダムに並び替える

連想配列(オブジェクト)の配列 をランダムに並び替えるには以下のようなスクリプトを使用します。

function shuffle(list) {
  var i = list.length;

  while (--i) {
    var j = Math.floor(Math.random() * (i + 1));
    if (i == j) continue;
    var k = list[i];
    list[i] = list[j];
    list[j] = k;
  }

  return list;
}

No.673
03/02 15:18

edit

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

ActionScript で コードヒントを出す接尾辞

Array           _array
Button          _btn
Camera          _cam
Color           _color
ContextMenu     _cm
ContextMenuItem _cmi
Date            _date
Error           _err
LocalConnection _lc
LoadVars        _lv
Microphone      _mic
MovieClip       _mc
MovieClipLoader _mcl
NetConnection   _nc
PrintJob        _pj
SharedObject    _so
Sound           _sound
String          _str
TextField       _txt
TextFormat      _fmt
Video           _video
XML             _xml
XMLNode         _xmlnode
XMLSocket       _xmlsocket
No.657
05/17 14:25

edit

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で .swf を読み込む時の注意

■ loadMovie()

loadMovie()で読み込むときは時のonDataイベントが使用できないのでデータ読み込み完了を検知できない。なので setInterval を使って読み込んだmcの高さ(もしくは幅など)の大きさの変化を調べる

■ MovieClipLoader()

MovieClipLoader はデータ読み込み完了を検知できるので、FlashPlayer7以降の環境ではこちらの方が扱いやすいと思われる。

メソッド一覧

メソッド	説明
MovieClipLoader.addListener() MovieClipLoaderオブジェクトのイベントリスナーに登録する。
MovieClipLoader.getProgress() ロード済みのバイト数および合計バイト数を返す。
MovieClipLoader.loadClip() SWFファイルまたはJPEGファイルをムービークリップにロード開始する。
MovieClipLoader.removeListener() MovieClipLoaderオブジェクトのイベントリスナーから消去する。
MovieClipLoader.unloadClip() ロードされたムービークリップを削除する。

リスナーイベント	説明
MovieClipLoader.onLoadComplete ロードされたファイルが完全にダウンロードされたとき。
MovieClipLoader.onLoadError ロードされたファイルがロードに失敗したとき。
MovieClipLoader.onLoadInit ロードしたクリップの先頭フレーム上のアクションが実行されたとき。
MovieClipLoader.onLoadProgress ロード対象のコンテンツがディスクに書き込まれるたびに呼び出される。
MovieClipLoader.onLoadStart ファイルのダウンロードが正常に開始されたとき。

引用:http://oshige.com/flash/note/2005/05/moviecliploader.html

No.627
09/09 11:23

edit

ActionScriptの数値データ型

何度も調べてしまうのでメモ

int(AS3で使用可能)
符号付きの整数
初期値:0
範囲:-2,147,483,648 (-2の31乗) 〜 2,147,483,647 (2の31乗 - 1)

uint(AS3で使用可能)
符号なし整数
初期値:0
範囲:0 〜 4,294,967,295 (2の32乗 - 1)

Number(AS2, AS3で使用可能)
整数、符号なし整数、および浮動小数点数
初期値:NaN
範囲:-9,007,199,254,740,992 (-2の53乗) 〜 9,007,199,254,740,992 (2の53乗)

引用:http://ra66it.net/blog/index.php?ID=575

No.626
09/08 12:09

edit

MTASC コマンドラインActionScript コンパイル環境

■ MTASC ActionScriptのコンパイラです。

http://www.mtasc.org/#download

(Windows, Mac, Linux 環境があり、それぞれダウンロードできます。)

主なメリットとしては、

・全てのデータをテキストのASソースファイルで扱うので、CVS開発による大規模開発に向いている。

・画像データは全て外部読み込みなので、画像を作成するデザイナーと、システムを構築するプログラマーでの作業の切り分けができる。(同じFLAファイルを触る必要がない。)

・完全にオブジェクト指向プログラミングに基づいているので、Flash OOPの実践に向いている。swingやiアプリ開発者には馴染みのよいものと思います。

・Macromedia FlashにてCtrl + EnterやShift + F12でコンパイルせずに済み、大量のFLAファイルのコンパイルの際に、batファイルやシェルスクリプト作成で簡便にコンパイルが行える。

・ラッピングが簡単なので、簡単なMacromedia Flexのようなものを作成できる。(Linux版もリリースされています。)

・上記に関連しますが、JSPからのジェネレートも簡単にできる。

・OOPを開発するだけのユーザーであれば、Macromedia Flashを購入する必要がない。

などでしょうか。

引用:http://www.javac.jp/mtasc/

参考:http://codezine.jp/article/detail/298?p=1

http://www.minfish.jp/blog/archives/2005/09/famesactionscri.html

No.624
09/08 10:52

edit

SWFAddressでFlashサイトの中ページ(階層下のページ)にURIを設定する

■ SWFAddress

http://www.asual.com/swfaddress/

このページの「Download」からSWFAddressをダウンロードすると、

「doc」ドキュメント、オブジェクトのリファレンス

「src」ソース。ここからコピーして使用する。AS1, AS2 AS3 用それぞれ入っているので使用するASのバージョンにあったものをここからコピーする

「samples」サンプル。この中の「adobe」を見れば使用方法がわかります。


SWFAddressを使用するときは getURL は使用できない

代わりに以下のようにする

import flash.external.ExternalInterface;
// ---CAN NOT USE---  getURL('javascript:my_method();');
ExternalInterface.call("function(){ javascript:my_method(); }");

参考:

http://chabudai.sakura.ne.jp/blog/?p=37

http://un-q.net/2007/07/geturl_window_open_swfaddress.html

No.620
09/10 18:03

edit

JSFLを使って複数の .flaファイルを一括パブリッシュする

複数の .flaファイルを一括パブリッシュするにはここのスクリプトが便利です
http://www.libspark.org/browser/jsfl/Commands/PublishFLAFiles.jsfl
使い方はこのスクリプトを publish.jsfl 等のテキストファイルに保存し
Flashの【コマンド】→【コマンドの実行】を行いこのファイルを指定します。


これはJSFL(JavaScript)による自動実行です。
JSFLについては
■ JSFLのヘルプ
http://www.adobe.com/support/documentation/jp/flash/
の検索窓から「JSFL」で検索するといろいろ出てきます。
No.576
08/23 12:41

edit

ActionScript 2.0 で正規表現

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)
添付ファイル1
No.574
07/27 13:41

edit

添付ファイル

正規表現
ActionScript2.0

オブジェクト , 配列の中身を表示させる _dump関数

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


No.573
03/26 14:55

edit

ActionScript2.0

開発用の古い FlashPlayer をインストールする。

開発用に古いFlashPlayer をインストールするには(For Mac OSX & Windows)

・1. まず現行のFlashPlayerをアンインストールします。
http://www.adobe.com/jp/shockwave/download/alternates/#fp
から アンインストーラーを入手し実行。

・2. 古いバージョンのFlashPlayerをダウンロードします
http://www.adobe.com/support/flash/ts/documents/oldplayers.htm
からインストールしたいバージョンをダウンロード

・3. FlashPlayerバージョンのテスト
http://www.adobe.com/jp/support/flashplayer/ts/documents/tn_15507.htm
へアクセスしてバージョンを確認します。


No.571
11/28 16:07

edit

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

ActionScript CGIスクリプトにデータを渡す

Flashマニュアルによると

・HTTP または HTTPS プロトコルを使用して URL エンコード形式で情報を送る関数と MovieClip メソッドには、getURL()、loadVariables()、loadVariablesNum()、loadMovie()、loadMovieNum() があります。
・HTTP または HTTPS プロトコルを使用して URL エンコード形式で情報を送信し、ロードする LoadVars メソッドには、load()、send()、および sendAndLoad() があります。
・HTTP または HTTPS プロトコルを使用して XML 形式で情報を送信し、ロードするメソッドには、XML.send()、XML.load()、および XML.sendAndLoad() があります。
・TCP/IP ソケット接続を生成し、その接続を使用して XML 形式で情報を送信し、ロードするメソッドには、XMLSocket.connect() と XMLSocket.send() があります。
No.420
01/27 13:06

edit

ActionScript で変数や配列やオブジェクトを空にする。

配列を空にする

var data_array=new Array();
data_array.push("test1");
data_array.push("test2");
data_array.push("test3");
data_array=[];

配列を走査して調べる

http://oshige.com/flash/note/archives/3_actionscript/35_/

No.417
08/07 12:48

edit

マスクをかけたムービークリップ内にダイナミックテキストを配置すると表示されない

マスクをかけたムービークリップ内にダイナミックテキストを配置すると表示されない

という現象に遭遇したので調べたところ仕様のようです。↓

なのでフォント埋め込みにて対応。

http://www.fumiononaka.com/TechNotes/Flash/FN0502002.html

No.416
01/27 13:06

edit

Flash ActionScript で外部テキストデータを読み込み表示させる【LoadVars() 】

1. アクションスクリプトで外部テキストデータを読み込むにはLoadVars() オブジェクトを使用します。

読み込み完了の関数を定義して、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");

2. Flashアニメーション上に読み込んだ外部テキストを表示させるには

まず「テキストツール」で「ダイナミックテキスト」を作成します。

名前を「my_txt」とつけます。

これでmy_txtに外部テキストが読み込まれます。

3. HTMLを読み込んで表示させるには

「// 読み込みデータの表示」の次の1行を下記のように書き換えます。

// 読み込みデータの表示
_this.my_txt.html = true;
_this.my_txt.htmlText = rawData;
No.411
06/14 21:07

edit

ActionScript2.0