with文の名前領域 – ActionScript3.0
2010年4月23日
AS3を本気で勉強しようと思い過去に何度入門したかわからないAS3を再び始めました。今回は本気です!(ってみんな言うよね。)
とりあえずTextField()から入門してHelloWorld的なことをやろうと思い頑張っていたら、with文がなかなか厄介でつまづきました。べつに使う必要ないんだけどね。
とりあえず、HelloWorld的な。
-
//************************************************************
-
// HelloWorld - TextField()
-
// とりあえず文字を書き出してみる。
-
//
-
package {
-
import flash.display.*;
-
import flash.text.*;
-
public class Main extends Sprite {
-
//------------------------------------------------------------
-
// Mainコンストラクタ
-
//
-
public function Main() {
-
-
//h1 TextFormat() を定義
-
var tf_h1:TextFormat = new TextFormat();
-
tf_h1.color = 0x666666;
-
tf_h1.size = 30;
-
tf_h1.font = 'Times New Roman';
-
tf_h1.align = TextFieldAutoSize.CENTER;
-
-
//titleを定義
-
var title:TextField = new TextField();
-
title.text = 'HelloWorld!! - TextField()';
-
title.width = stage.stageWidth;
-
title.height = 40;
-
title.x = 0;
-
title.y = (stage.stageHeight/2);
-
title.setTextFormat( tf_h1 );
-
title.background = true;
-
title.backgroundColor = 0xEEEEEE;
-
-
//stageに要素を追加
-
stage.addChild( title );
-
}
-
}
-
}
▽結果
インスタンスのプロパティをwith文を使ってまとめてみる。
-
//titleを定義
-
var title:TextField = new TextField();
-
with( title ){
-
text = 'HelloWorld!! - TextField()';
-
width = stage.stageWidth;
-
height = 40;
-
x = 0;
-
y = (stage.stageHeight/2);
-
setTextFormat( tf_h1 );
-
background = true;
-
backgroundColor = 0xEEEEEE;
-
}
・・・これがですね、実は思わぬ落とし穴があって動いてくれないんです。
with文の中身というのは、親オブジェクトの名前領域の中にいる状態(表現あってる?)です。ここで問題になっているのは、stageオブジェクトです。"stage.stageWidth" の部分。
親が"title"オブジェクトなので、with文の中では、"title.stage.stageWidth" というように見られてしまいます。もちろん、titleインスタンスにはそんな階層のプロパティをもっていません。
それでもwith文を使いたい場合はこのように書きます。
-
//titleを定義
-
var title:TextField = new TextField();
-
var stageInstance:Object = stage;
-
with( title ){
-
text = 'HelloWorld!! - TextField()';
-
width = stageInstance.stageWidth;
-
height = 40;
-
x = 0;
-
y = (stageInstance.stageHeight/2);
-
setTextFormat( tf_h1 );
-
background = true;
-
backgroundColor = 0xEEEEEE;
-
}
一旦、上のスコープ内でstageを参照するオブジェクト"stageInstance" を生成して、"stageInstance" を参照しに行きます。この手間を考えると、そこまでしてwith文使う必要ないんじゃない?という気になります。名前領域に気を使うのはめんどくさ過ぎる気がします。
そんなwith文ちゃんでした。
TrackBack URL :
Comments (0)

