新ブログ「ごんフラブログG2」

WordPressで始めてみました

[海外]バンドルされた複数のゲーム・PCアプリが購入できるサイト
humblebundle.com


ごんたろうのぼやきトップ

2013年12月06日

【Flash】連想配列の削除[AS3.0]

AS3でObjectの要素の削除。

var obj:Object=new Object();
obj[0]={"names":"hoge1","values":"value1"};
obj[1]={"names":"hoge2","values":"value2"};
obj[2]={"names":"hoge3","values":"value3"};

delete obj[1];

上記のようにdeleteで削除可能。
また、
delete obj[1]["values"]とすると、特定のキーを削除も可能。

AS1、AS2、でも共通?
posted by ごんたろう(Gontaro-Soft) at 15:46 | Comment(0) | ActionScript3.0

2013年11月15日

【Flash】連想配列の要素数

【JavaScript】連想配列の要素数
http://gon-fla.sblo.jp/article/64009652.html に
JavaScript版を書いておりますが、
Flashも全く同じようなコードで解決できます。


■AS3.0/AS2.0 共通

function Get_Hash_Length(arr:Object):Number{
var cnt:Number=0;
for(var key in arr){
cnt++;
}
return cnt;
}

//コード呼び出しと例
var test_obj:Object=new Object();
test_obj={names:"テスト1",toshi:15,id:"A00001"};

var leng:Number=0;//もしくはvar leng:Number;
leng=Get_Hash_Length(test_obj);
trace(leng);//結果 3

━━━━━━━━━━━━━━━━━━━━
■AS1.0
function Get_Hash_Length(arr) {
var cnt = 0;
for (var key in arr) {
cnt++;
}
return cnt;
}

//コード呼び出しと例
var test_obj = new Object();
test_obj = {names:"テスト1", toshi:15, id:"A00001"};

var leng = 0;//もしくはvar leng:Number;
leng = Get_Hash_Length(test_obj);
trace(leng);//結果 3


AS1.0とAS2.0、AS3.0の違いは
変数宣言の部分とfunction関数の最初の行くらいでしょうか。
ほぼ同一のコードで要素数を取り出すことが可能です。
posted by ごんたろう(Gontaro-Soft) at 10:18 | Comment(0) | ActionScript3.0

2013年10月11日

Action Script 3.0

Action Script 2.0から3.0へ移行した時の注意。
■2014/11/29追記■
◇文字列から関数を呼び出す
◇動的に作成したムービークリップにアクセスする。※2014/11/29追記
◇root、parentなどの書き方
■■■■■■■■■■■■■■■■■■■■
※随時追記

2013/11/17
■関数を文字列から呼び出す。
AS2ではevalを使って関数を呼び出すことが出来ました。
AS3に移行した場合はどうすれば良いのでしょうか。

文字列と変数を組み合わせて、自作関数を呼び出す方法です。

基本は
this["関数名"+変数]();
で呼び出すことが出来ます。
また、ムービークリップなどから階層を指定して
関数を呼び出す場合は
parent["関数名"+変数]();
root["関数名"+変数]();
と記述すれば可能です。
前の部分にある
thisやparent、rootは必須です。

□サンプル
function Test1() {
trace("test1");
}
function Test2() {
trace("test2");
}
function Test3() {
trace("test3");
}
function Test5_2() {
trace("Test5_2");
}
Test1();
var num:Number=2;
this["Test"+num]();
num=3;
this["Test"+num]();
num=5;
var num2:Number=2
this["Test"+num+"_"+num2]();

■2014/11/29 追記
【親の親の関数を指定する場合】
parent.parent["Test"+num+"_"+num2]();

☆別の書き方
MovieClip(parent.parent)["Test"+num+"_"+num2]();
※直前のオブジェクトを指定するドットを付けないというところに注意が必要です。
また
parent.parent.Test[2]]();
などの配列を指定する様な書き方もエラーになります。

//実行結果
//test1
//test2
//test3
//Test5_2

━━━━━━━━━━━━━━━━━━━━
<a name="mc_call"></a>

2013/11/13
動的に作成(生成)したムービークリップ内の
ムービークリップなどを参照する場合の注意。

addChildで生成したムービークリップをnameを使用して
その中のムービークリップにアクセスしようと思ったら
できなくて、かなりの時間つまずいたので記録。


あらかじめ、作成するムービークリップには
ちゃんと「ムービークリップ.name」を指定しておく。

var mc:MovieClip=new hoge_mov();
mc.name="hoge1";

上記のムービークリップ内の「child_mov」にアクセスする場合、
hoge1.child_mov〜でアクセスできるかと思いきや、
これが不可能だった。


結果:「getChildByName」を使用してアクセス(参照)させる。
もしくはMovieClip型の変数を保持しておいて、そこからアクセスする。
(やることは同じです)

どういうことかというと、「hoge1」というnameをMovieClip型に変換して
アクセスするということになります。


var name_str:String="hoge1";
var mc:MovieClip = MovieClip(getChildByName(name_str));
mc.child_mov〜
という形になります。

この形式を覚えておけば、MovieClip型で変数を保持し続けなくても
参照する必要がある場合にのみ、上記の方法を使えば
参照可能です。(要name指定)

nameを指定しない場合、インスタンス名が毎回変わるなど、
挙動が安定しないこともあるので、nameはしっかりと指定するのが
良いようです。

for文などで同じムービークリップを作成する場合など
nameは必ず指定しましょう。

━━━━━━━━━━━━━━━━━━━━

<a name="path_call"></a>

2013/10/11
■_rootの書き方。(パス指定)
AS2.0−_root

AS3.0−MovieClip(root) もしくは
var rootmc:MovieClip = root as MovieClip

後者のような書き方だと、階層が変わったりした場合には
結局MovieClip(root)やMovieClip(parent)などと
記述しないといけないため、
私は前者「MovieClip(root)」のような書き方で
統一することにしました。
posted by ごんたろう(Gontaro-Soft) at 17:12 | Comment(0) | ActionScript3.0
ブログランキング・にほんブログ村へ
にほんブログ村

インターネット・コンピュータランキング