textfieldをラップしたMCをマスクしてハマる

| | コメント(2)

以下のようなテキストフィールドをMovieClipに入れ子にしたオブジェクトをマスクしたいとします。

*今回はマスクターゲット(MyText)とマスクオブジェクトの関係が分かりやすいように、実際にマスクを適用するのではなく、赤色の半透明のShapeをマスク用オブジェクトとして作成しています。

普通にMyTextのx, y, width, heigthでマスクオブジェクトを作成すると、こんな感じだと思います。

coverObject(myText);

function coverObject(obj:DisplayObject):void {
	var shape:Shape = new Shape();
	shape.graphics.beginFill(0xff0000, .5);
	shape.graphics.drawRect(obj.x, obj.y, obj.width, obj.height);
	addChild(shape);
	trace("x:", obj.x, ", y:", obj.y, ",width:", obj.width, ", height:", obj.height);
	//output x: 10 , y: 10 , width: 208.7 , height: 261.05
}

この結果がこちら。 なんか微妙に右と下の端が欠けちゃってます。


これをフィックスしたのがこちらのソース

coverObject(myText);

function coverObject(obj:DisplayObject) {
	var rect:Rectangle = obj.getBounds(this);
	var shape:Shape = new Shape();
	shape.graphics.beginFill(0xff0000, .5);
	shape.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
	trace("x:", rect.x, ", y:", rect.y, ", width:", rect.width, ", height:", rect.height);
	//output x: 12.35 , y: 11.55 , width: 208.70000000000002 , height: 261.05
	addChild(shape);
}

trace文が出力する値に注目すると、getBoundsを使用した場合は、MyTextの実際の表示領域、つまり内包するテキストフィールドの位置がマスク座標として指定されていますね。

んー、考えれば当たり前のようにも思えるのですが、MyText.widthとMyText.heightが返す値について、どこか釈然としない感じがするのは僕だけでしょうか?

あ、getBounds()を使いましたが、表示領域のボーダーを考慮しない場合はgetRect()で良かったのかもしれません。

コメント(2)

TextField.textWidth/textHeightを使ってみてはどうでしょうか

あー、yosshyさんだ。どうもー。
いつもネットストーキングさせてもらってますw。

とりあえずMovieClip内のTextFieldを参照しようと、無理矢理

function coverObject(obj:MovieClip):void {
  var textfield:TextField = obj.getChildAt(0) as TextField;
  //以下省略
}

みたいにやってみたのですが、nullポが返ってきてしまってションボリしてます。

直接TextFieldをマスクするのであれば、TextFieldのwidthとheightでマスクすれば問題ないんですけどね。

なにかエライ勘違いをしていたらゴメンナサイ。

コメントする

このブログ記事について

このページは、が2008年3月 6日 15:13に書いたブログ記事です。

ひとつ前のブログ記事は「第4回 東京てら子 その2」です。

次のブログ記事は「Soundboothキャンペーン?」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01