トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     MCの存在を調べる
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
cancan
Åê¹ÆNo.45401
投稿日時: 2010-7-29 20:27
新米
居住地: 埼玉
投稿: 21
使用環境:
AS2.0:WindowsXP、Flash8
AS3.0:Win7、CS5.5
Re: MCの存在を調べる
ひろゆきさん
本当にありがとうございます。

>オブジェクトが存在していれば、true「として」評価されるのであって、
>true「ではない」でしょう?

あ、そうですね。
なんとなくイメージできました。

trace(a_mc)の結果が、インスタンスのパスが得られる…ということは、if (a_mc)はパスを評価している、と考えていいんですか?
そうではなくて、やっぱりa_mcという「ムービークリップ」を評価している、ということですか?


----------------
cancan@さいたま

961832p
Åê¹ÆNo.45402
投稿日時: 2010-7-29 20:34
常連
居住地: Akiruno-shi
投稿: 155
使用環境:
 
:AS3:
- Adobe Flex SDK, Eclipse, AIR GEAR
- LB.Log AS3, Alcon2

:AS2:
- AMES(ASDT, MTASC, Eclipse, swfmill)
- Natural Entry Point Method
- LB.Log, Zeroi

Pro, Firefox, Chromium(Iron), IE

----------------
Pro,
Re: MCの存在を調べる
 
自分はこのあたり、いつも感覚的に使ってしまっているので(汗)、解釈が間違っているかもしれませんが、
「if(a_mc == true)」は、「MovieClip型の変数a_mcの中身」と「Boolean型の値true」は等しいかどうかの評価結果が真か偽かという事なので、この場合は偽に。
「if(a_mc)」は、MovieClip型の変数a_mcの中身の評価結果が真か偽かという事なので、undefinedやnullが入っていれば偽、それ以外のもの(参照?)が入っていれば真に、
といった感じなのでしょうか。

「感覚的に」とか言ってる自分が言うのは変ですが(汗)、慣れないうちは略さずに丁寧な記述を心がけたほうが、ミスも防げて良いのかもしれませんね。
気になったので、どういうのがtrueやfalseになるのか自分もAS2とAS3の両環境でやってみました。コードと各結果は下にありますので参考になれば幸いです。

このスレッドとは直接関係ありませんが、AS3環境では中身がundefinedではなくnullに置き換えられていて、結果がAS2の時と少し違っていました。
こういったところは、ちゃんと把握していないとバグが入り込みやすそうで、何だか不安になりますね(汗)。

----------------

以降は今回試したAS2とAS3のコードです。コメント部分は各行の出力結果になっています。

【AS2】

var mc0:MovieClip;
var mc1:MovieClip = undefined;
var mc2:MovieClip = null;
var mc3:MovieClip = this.createEmptyMovieClip("3_mc", this.getDepth() + 1);

//undefined undefined null _level0.main_mc.3_mc
trace("i "+ mc0 +" "+ mc1 +" "+ mc2 +" "+ mc3);

//false false false false
trace("i "+ (mc0 == true) +" "+ (mc1 == true) +" "+ (mc2 == true) +" "+ (mc3 == true));

//false false false false
trace("i "+ (mc0 == false) +" "+ (mc1 == false) +" "+ (mc2 == false) +" "+ (mc3 == false));

//false false false true
trace("i "+ Boolean(mc0) +" "+ Boolean(mc1) +" "+ Boolean(mc2) +" "+ Boolean(mc3));

//false false false true
trace("i "+ (Boolean(mc0) == true) +" "+ (Boolean(mc1) == true) +" "+ (Boolean(mc2) == true) +" "+ (Boolean(mc3) == true));

//true true true false
trace("i "+ (Boolean(mc0) == false) +" "+ (Boolean(mc1) == false) +" "+ (Boolean(mc2) == false) +" "+ (Boolean(mc3) == false));

//true true true false
trace("i "+ !mc0 +" "+ !mc1 +" "+ !mc2 +" "+ !mc3);

//false false false true
trace("i "+ !!mc0 +" "+ !!mc1 +" "+ !!mc2 +" "+ !!mc3);

//true true true false
trace("i "+ (mc0 == undefined) +" "+ (mc1 == undefined) +" "+ (mc2 == undefined) +" "+ (mc3 == undefined));

//true true true false
trace("i "+ (mc0 == null) +" "+ (mc1 == null) +" "+ (mc2 == null) +" "+ (mc3 == null));

//true true false false
trace("i "+ (mc0 === undefined) +" "+ (mc1 === undefined) +" "+ (mc2 === undefined) +" "+ (mc3 === undefined));

//false false true false
trace("i "+ (mc0 === null) +" "+ (mc1 === null) +" "+ (mc2 === null) +" "+ (mc3 === null));

//false false
trace("i "+ (undefined == true) +" "+ (null == true));

//false false
trace("i "+ (undefined == false) +" "+ (null == false));

//false false
trace("i "+ (Boolean(undefined) == true) +" "+ (Boolean(null) == true));

//true true
trace("i "+ (Boolean(undefined) == false) +" "+ (Boolean(null) == false));

//true true
trace("i "+ (!undefined == true) +" "+ (!null == true));

//false false
trace("i "+ (!undefined == false) +" "+ (!null == false));

//false false
trace("i "+ (!!undefined == true) +" "+ (!!null == true));

//true true
trace("i "+ (!!undefined == false) +" "+ (!!null == false));

【AS3】

var mc0:MovieClip;
var mc1:MovieClip = undefined;
var mc2:MovieClip = null;
var mc3:MovieClip = new MovieClip();

//null null null [object MovieClip]
Log.trace("i "+ mc0 +" "+ mc1 +" "+ mc2 +" "+ mc3);

//false false false false
Log.trace("i "+ (mc0 == true) +" "+ (mc1 == true) +" "+ (mc2 == true) +" "+ (mc3 == true));

//false false false false
Log.trace("i "+ (mc0 == false) +" "+ (mc1 == false) +" "+ (mc2 == false) +" "+ (mc3 == false));

//false false false true
Log.trace("i "+ Boolean(mc0) +" "+ Boolean(mc1) +" "+ Boolean(mc2) +" "+ Boolean(mc3));

//false false false true
Log.trace("i "+ (Boolean(mc0) == true) +" "+ (Boolean(mc1) == true) +" "+ (Boolean(mc2) == true) +" "+ (Boolean(mc3) == true));

//true true true false
Log.trace("i "+ (Boolean(mc0) == false) +" "+ (Boolean(mc1) == false) +" "+ (Boolean(mc2) == false) +" "+ (Boolean(mc3) == false));

//true true true false
Log.trace("i "+ !mc0 +" "+ !mc1 +" "+ !mc2 +" "+ !mc3);

//false false false true
Log.trace("i "+ !!mc0 +" "+ !!mc1 +" "+ !!mc2 +" "+ !!mc3);

//true true true false
Log.trace("i "+ (mc0 == undefined) +" "+ (mc1 == undefined) +" "+ (mc2 == undefined) +" "+ (mc3 == undefined));

//true true true false
Log.trace("i "+ (mc0 == null) +" "+ (mc1 == null) +" "+ (mc2 == null) +" "+ (mc3 == null));

//false false false false
Log.trace("i "+ (mc0 === undefined) +" "+ (mc1 === undefined) +" "+ (mc2 === undefined) +" "+ (mc3 === undefined));

//true true true false
Log.trace("i "+ (mc0 === null) +" "+ (mc1 === null) +" "+ (mc2 === null) +" "+ (mc3 === null));

//false false
Log.trace("i "+ (undefined == true) +" "+ (null == true));

//false false
Log.trace("i "+ (undefined == false) +" "+ (null == false));

//false false
Log.trace("i "+ (Boolean(undefined) == true) +" "+ (Boolean(null) == true));

//true true
Log.trace("i "+ (Boolean(undefined) == false) +" "+ (Boolean(null) == false));

//true true
Log.trace("i "+ (!undefined == true) +" "+ (!null == true));

//false false
Log.trace("i "+ (!undefined == false) +" "+ (!null == false));

//false false
Log.trace("i "+ (!!undefined == true) +" "+ (!!null == true));

//true true
Log.trace("i "+ (!!undefined == false) +" "+ (!!null == false));

※AS3環境ではビルド時、以下の警告がでました。

Main.as(27): col: 112 警告: MovieClip 型の変数は undefined にすることができません。値 undefined は MovieClip に型強制された後で比較されます。
            Log.trace("i " + (mc0 == undefined) + " " + (mc1 == undefined) + " " + (mc2 == undefined) + " " + (mc3 == undefined));
                                                                                                               ^
Main.as(30): col: 115 警告: MovieClip 型の変数は undefined にすることができません。値 undefined は MovieClip に型強制された後で比較されます。
            Log.trace("i " + (mc0 === undefined) + " " + (mc1 === undefined) + " " + (mc2 === undefined) + " " + (mc3 === undefined));
                                                                                                                  ^
Main.as(33): col: 59 警告: null の比較が無効です。Boolean 型の変数は null にすることができません。
            Log.trace("i " + (undefined == true) + " " + (null == true));
                                                          ^
Main.as(34): col: 60 警告: null の比較が無効です。Boolean 型の変数は null にすることができません。
            Log.trace("i " + (undefined == false) + " " + (null == false));
                                                           ^


----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー

野中文雄
Åê¹ÆNo.45403
投稿日時: 2010-7-30 2:33
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: MCの存在を調べる
「abcという変数」に、数値100や文字列"test"を入れてお試しください。
引用:
cancanさんは書きました:
例えば、abcという変数にtrueかfalseか入ってるとしたら、
if(abc)もif(abc==true)も同じでいいんですよね?
教えていただいたサイトに、「表001■データのブール(論理)値評価」というのがあって、オブジェクトはtrueと書いてありました。
そしたらMc==trueでできないのかな?と思ったもので…

「ブール(論理)値」として「評価」するというのは、ブール(論理)値つまり「Boolean型」のデータに「変換」することを意味します。
trace(Boolean(100));
trace(Boolean("test"));
trace(Boolean(a_mc));

「trace(a_mc)の結果」は、[出力]パネルに表示するためにこれも変換された「特別な(文字列)表現」であって、中身そのものではありません。変数(インスタンス名)の中身は「ムービークリップ」(オブジェクト)、もっと正確には「ムービークリップ」(オブジェクト)の「参照」と呼ばれるものです。
引用:
cancanさんは書きました:
trace(a_mc)の結果が、インスタンスのパスが得られる…ということは、if (a_mc)はパスを評価している、と考えていいんですか?
そうではなくて、やっぱりa_mcという「ムービークリップ」を評価している、ということですか?

ActionScript 3.0では、型指定をした変数に値が設定されていないとき、値はそのデータ型のデフォルト値になります。undefinedが返るのは、型指定をしない変数の初期値や配列に存在しないエレメント値、値を返さない(void)関数の戻り値などごくかぎられた場合です。
引用:
961832pさんは書きました:
このスレッドとは直接関係ありませんが、AS3環境では中身がundefinedではなくnullに置き換えられていて、結果がAS2の時と少し違っていました。
こういったところは、ちゃんと把握していないとバグが入り込みやすそうで、何だか不安になりますね(汗)。


----------------
 

cancan
Åê¹ÆNo.45404
投稿日時: 2010-7-30 12:42
新米
居住地: 埼玉
投稿: 21
使用環境:
AS2.0:WindowsXP、Flash8
AS3.0:Win7、CS5.5
Re: MCの存在を調べる
961832pさん
たくさんの結果をありがとうございます。
参考にします。

じっくり見てるとこんがらがりそうになりましたが(笑)型指定して宣言してただけでは、Boolean変換してtrueにはならないんですね。はやりcreateEmptyMovieClipが必要なんですね(AS2.0では)

関係ないですが、3_mcと、数字で始まるmc名もエラーになるわけではなく付けられるんですね!

素朴な?疑問に共感いただきありがとうございました(^^)


----------------
cancan@さいたま

cancan
Åê¹ÆNo.45405
投稿日時: 2010-7-30 12:50
新米
居住地: 埼玉
投稿: 21
使用環境:
AS2.0:WindowsXP、Flash8
AS3.0:Win7、CS5.5
Re: MCの存在を調べる
Fumioさん
回答ありがとうございます。

>「評価」するというのは、ブール(論理)値つまり「Boolean型」のデータに「変換」することを意味します

なるほど、分かりました。
if(a_mc)というのは、if(a_mc==true)ではなく、if(Boolean(a_mc)==true)、のことなのですね。
試してみましたが、なるほど、結果が一致しました。
traceの結果も、変換された「特別な(文字列)表現」ということ、勉強になりました。

モヤモヤがスッキリしました(*^-^*)
ご回答いただいたみなさん、本当にありがとうございました。


----------------
cancan@さいたま

961832p
Åê¹ÆNo.45407
投稿日時: 2010-7-30 14:01
常連
居住地: Akiruno-shi
投稿: 155
使用環境:
 
:AS3:
- Adobe Flex SDK, Eclipse, AIR GEAR
- LB.Log AS3, Alcon2

:AS2:
- AMES(ASDT, MTASC, Eclipse, swfmill)
- Natural Entry Point Method
- LB.Log, Zeroi

Pro, Firefox, Chromium(Iron), IE

----------------
Pro,
Re: MCの存在を調べる
 
cancan さん、応答ありがとうございます。

今回テストに使ったコードは確かに見づらいですね(汗)。
「これはどうかな?あれはどうだろう?」と色々やっていたら大量になってしまい、あまり意味の無い部分もありそうです。

今回のスレッドがきっかけで、自分もBoolean型とundefinedについて理解を深める事ができました。ありがとうございました。

----------------

Fumio さん、情報ありがとうございました。

AS2のコードをAS3へ持ってくる場合は、特に注意が必要そうですね…気をつけねば。


----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー

野中文雄
Åê¹ÆNo.45412
投稿日時: 2010-7-31 5:49
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: MCの存在を調べる
基本的に、変数には初期値を与えることでしょう。ということで、「変数には初期値を与える」をまとめました。
引用:
961832pさんは書きました:
AS2のコードをAS3へ持ってくる場合は、特に注意が必要そうですね…気をつけねば。


----------------
 

« 1 (2)
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops