Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.235.226.14] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте, сделал меню, после нажатия на кнопку стоит обработчик и в зависимости от выбранного пункта меню выполняется вложенный класс
function clickHandler():void { switch(name) { case "start": var gameStart:Class = new gameStart(); break; } } Содержимое gameStart.as package { import flash.display.Sprite; [SWF(backgroundColor="#06b6ff", width="800", height="730", frameRate="30")] public class gameStart extends Sprite { public function gameStart() { } } } Скажите пожалуйста, как обойтись без очистки созданных элементов (обойтись без remoteChild) и создать новое чистое поле, чтобы мог добавлять туда новые элементы. Дело в том, что я пишу полностью кодом, без использования Adobe CSx по координатам X,Y (во FlexSDK). Объясню дополнительно еще проще. Хочу, чтобы после нажатия на кнопку переходило в новое окно, уже игровое/рейтинг/помощь и т.п. Вопрос может глупый, но я даже не смог сформулировать его для гугла, чтобы поискать решение там. Заранее очень признателен за любую помощь или намек. |
Сообщ.
#2
,
|
|
|
Кстати, тот вариант который я хотел применить, мне не подойдет, так как у меня помимо кнопок в интерфейсе и обычные статичные битмапы.
private function removeAllChildren():Boolean { for (var i:int = 0; i < this.numChildren; i++ { this.removeChildAt(i); } return true; } Может подскажите, как же быть Добавлено Покрайней мере, удаляются не все Child |
Сообщ.
#3
,
|
|
|
Цитата diel @ Покрайней мере, удаляются не все Child Развернуть цикл надо, так как каждый раз, когда ты вызываешь removeChildAt(x), у тебя изменяется количество дочерних элементов. А вообще можно проще: while (numChildren>0) removeChildAt(0); |
Сообщ.
#4
,
|
|
|
Спасибо большое, именно такое решение ночью я и нашел, но остается еще вопрос. После очистки всех элементов, не получается вызовом нового класса создать любые другие элементы. Просто остается пустое окно. Подскажите пожалуйста, что я не так делаю?
|
Сообщ.
#5
,
|
|
|
Мало кода для ответа на вопрос. Я подозреваю, что после создания объекта через new gameStart() ты забываешь его положить на экран через addChild(). Если нет, то проверь, не сразу ли его с экрана убирает очисткой.
|
Сообщ.
#6
,
|
|
|
Вот например, рейтинг (тут не отрисовывается шапка например), сделал для теста. addChild есть.
package { import flash.display.Sprite; import flash.display.Bitmap; [SWF(backgroundColor="#06b6ff", width="800", height="730", frameRate="30")] public class rating extends Sprite { [Embed(source = "data/header.png", mimeType = "image/png")] private static const imgHeader:Class; public function rating() { addImage(imgHeader, 25, 10); } private function addImage(image:Class, x:int, y:int):void { var bitmap:Bitmap = new image(); bitmap.x = x; bitmap.y = y; addChild(bitmap); } } } Вот после обработки клика кусок кода чищу от Child-ов и вызываю класс case "rating": Sounds.playSound(sndClick, 100, false); removeAllChildren(); var rating:Class = new rating(); break; Добавлено Вот кстати, что дебаггер возвращает. Буду пока гуглить Цитата TypeError: Error #1007: Instantiation attempted on a non-constructor. at Function/main/private:addButton/mouseClick()[\build\src\main.as:164] |
Сообщ.
#7
,
|
|
|
Прошу прощения, стоило поспать пару часов и просто подумать, все исправил.
case "rating": Sounds.playSound(sndClick, 100, false); removeAllChildren(); var r:rating = new rating(); addChild(r); break; Благодарю за помощь! |