AzagThoth |
09.04.2013 22:51 |
Как создать ComboBox программно (FlashDevelop)
Здравствуйте. Хочу переписать своё приложение с AS2 на AS3. Но вот решил сделать это полностью во FlashDevelop. Всё вроде получается. Но столкнулся с трудностью. Каким образом можно программно создавать компонент ComboBox? Обыкновенное создание кодом к сожалению не работает.
Код AS3:
package net.azag.as3
{
import fl.controls.ComboBox;
import flash.display.MovieClip;
import flash.events.Event;
/**
* ...
* @author Azag-Thoth
*/
public class Main extends MovieClip
{
public var playlist_cb : ComboBox;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
playlist_cb = new ComboBox();
playlist_cb.addItem({label:"Item 1"});
playlist_cb.addItem({label:"Item 2"});
playlist_cb.addItem({label:"Item 3"});
addChild(playlist_cb);
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
}
}
}
После компиляции такая ошибка:
Код:
TypeError: Error #2007: Параметр child не должен быть равен нулю.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/drawBackground()
at fl.controls::BaseButton/draw()
at fl.core::UIComponent/drawNow()
at fl.controls::ComboBox/drawLayout()
at fl.controls::ComboBox/draw()
at fl.core::UIComponent/callLaterDispatcher()
Я думаю что дело в том, что если бы я делал это во Flash IDE то там, на рабочий стол перетягиваем компонент, а затем с него удаляем и так после фиксации компонента в библиотеки символов можно с ним работать. Здесь же библиотеки символов как бы и нету вовсе. Подозреваю что это достаточно фундаментальный вопрос который имеет отношение к использованию не только ComboBox, но и любых других компонентов. Пожалуйста, подскажите как сделать или где почитать об этом.
Добавлено через 46 минут
Вероятно поторопился с созданием темы. Уже нагуглил.
Тут:
http://www.flasher.ru/forum/showthread.php?t=137673
http://www.murmadillo.tut.su/html/slider.html
http://flashgamedev.ru/viewtopic.php?f=6&t=1019
http://stackoverflow.com/questions/5...tionscript-3-0
http://flashgamedev.ru/viewtopic.php?f=6&t=1019
http://as3coder.blogspot.ru/2009/12/...shdevelop.html
http://www.flashdevelop.org/communit...hp?f=13&t=4344
Добавлено через 2 часа 33 минуты
Тем не менее пока ничего не выходит. Если у кого-то есть пример как такое сделать, покажите пожалуйста.
Добавлено через 3 часа 14 минут
Расскажу поподробнее как я делаю сейчас.
Во Flash IDE создаю новый .fla (тип AS3)
После этого перетаскиваю в библиотеку компонент.
В параметрах публикации выставляю галочку на swc. Публикую.
После этого во FlashDevelop нажимаю на появившемся .swc файлике второй кнопкой мыши и нажимаю "Add To Library".
Теперь код:
Код AS3:
package net.azag.as3
{
import fl.controls.ComboBox;
import flash.display.MovieClip;
import flash.events.Event;
/**
* ...
* @author Azag-Thoth
*/
public class Main extends MovieClip
{
public var playlist_cb : ComboBox;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
playlist_cb = new ComboBox();
playlist_cb.addItem({label:"Item 1"});
playlist_cb.addItem({label:"Item 2"});
playlist_cb.addItem({label:"Item 3"});
addChild(playlist_cb);
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
}
}
Ошибки:
Код:
TypeError: Error #2007: Параметр child не должен быть равен нулю.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/drawBackground()
at fl.controls::BaseButton/draw()
at fl.core::UIComponent/drawNow()
at fl.controls::ComboBox/drawLayout()
at fl.controls::ComboBox/draw()
at fl.core::UIComponent/callLaterDispatcher()
TypeError: Error #2007: Параметр child не должен быть равен нулю.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/drawBackground()
at fl.controls::BaseButton/draw()
at fl.core::UIComponent/callLaterDispatcher()
Добавлено через 17 часов 39 минут
Всё заработало после перезапуска FlashDevelop. Чудеса да и только.
|