新規に作った 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.