イナヅマTVログ

Flex & GUMBO メモ, Sprite を addChild するの巻

| 0件のコメント

新規に作った Sprite などを Flex & GUMBO で addChild するだけなのにグダグダしてしまったのでメモしとく。

new Sprite() で作った Sprite インスタンスHBox, VBox などへ addChild して配置しようとすると実行時にエラーになる。

TypeError: Error #1034: 強制型変換に失敗しました。flash.display::Sprite@145df4c1 を mx.core.IUIComponent に変換できません。


mx.core.IUIComponent はインターフェース。
IUIComponent を Implements したクラスインスタンスでないといけないってことらしい。

【手順】
1.Sprite を作成
2.mx.core.UIComponent インスタンス作成
3.mx.core.UIComponent インスタンスを addChild
4.mx.core.UIComponent インスタンスへ Sprite インスタンスを addChild

という風にするみたい。

<mx:HBox x="0" y="0" width="100%" id="hboxID"></mx:HBox>
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
import flash.display.Sprite;
 
protected function createRect ():void
{
	var x:uint = 0;
	var y:uint = 0;
	var w:uint = 30;
	var h:uint = 30;
	var sprite: Sprite = new Sprite();	
	var graphic:Graphics =  sprite.graphics;
	graphic.beginFill(0xff00000);
	graphic.drawRect(x,y,w,h);
	graphic.endFill();
	var uic:UIComponent = new UIComponent();
	hboxID.addChild(uic);
	uic.addChild(sprite);
} 
]]>
</mx:Script>

小さな1歩をやっと踏み出せた感じ。
Flex 界隈では当たり前のことなんだろうなぁ。

mx.core.IUIComponent Language Reference が頼りでした。

The UIComponent class is the base class for all visual components, both interactive and noninteractive.
An interactive component can participate in tabbing and other kinds of keyboard focus manipulation, accept low-level events like keyboard and mouse input, and be disabled so that it does not receive keyboard and mouse input. This is in contrast to noninteractive components, like Label and ProgressBar, which simply display contents and are not manipulated by the user.

The UIComponent class is not used as an MXML tag, but is used as a base class for other classes.

コメントを残す

必須欄は * がついています