swc にリソースが埋め込めない
ボタンをいくつか縦に並べたメニューをライブラリに移したんだけど、うまく動かなかった。メニューにはそれぞれ違った背景画像を使うんだけど、その画像が表示されない。どうやら埋め込まれていないのが原因らしい。プロジェクトのプロパティで、swc に含めるように指定したはずなんだけど…。
メニュー項目は、背景画像とテキストだけが異なるがその他の設定は共通なので、 Repeater を使って次のように書いた。(関係ない属性は省略した)
<!-- メニューボタンを縦に並べる(画像が埋め込まれない) --> <mx:Repeater id="menuRepeater" dataProvider="{menuItemArray}"> <mx:Canvas backgroundImage="{menuRepeater.currentItem.imgpath}"> <mx:VBox width="100" height="100" click="(略)"> <mx:Text htmlText="{menuRepeater.currentItem.title}"/> </mx:VBox> </mx:Canvas> </mx:Repeater>
メニュー項目を1つずつ書いて背景画像を直接 "@Embed" 指定すると埋め込まれるんだけど、Repeater を使った場合にはその書き方は無理。
ちょっと調べたら、次のように書くと埋め込まれるという記述を発見した。
[Embed(source="assets/menu01.jpg")] [Bindable] private var menu01 : Class;
これも試したけどだめでした。なんでだ!
結局、以下のように画像を使うことを静的にわかるように(?)してやると、無事に埋め込まれました。
[Embed(source="assets/menu01.jpg")] [Bindable] private var menu01 : Class; [Embed(source="assets/menu02.jpg")] [Bindable] private var menu02 : Class; [Embed(source="assets/menu03.jpg")] [Bindable] private var menu03 : Class; [Embed(source="assets/menu04.jpg")] [Bindable] private var menu04 : Class; [Embed(source="assets/menu05.jpg")] [Bindable] private var menu05 : Class; [Embed(source="assets/menu06.jpg")] [Bindable] private var menu06 : Class; [Embed(source="assets/menu07.jpg")] [Bindable] private var menu07 : Class; private var imgArray : Array = [menu01, menu02, menu03, menu04, menu05, menu06, menu07]; private function selectImg(idx : int) : Class { return imgArray[idx]; }
<!-- メニューボタンを縦に並べる(画像が埋め込まれる) --> <mx:Repeater id="menuRepeater" dataProvider="{menuItemArray}"> <mx:Canvas backgroundImage="{selectImg(menuRepeater.currentIndex)}"> <mx:VBox width="100" height="100" click="(略)"> <mx:Text htmlText="{menuRepeater.currentItem.title}"/> </mx:VBox> </mx:Canvas> </mx:Repeater>
バロス!俺はなんか根本的な勘違いをしてるのか!?