На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: PIL
  
> Как обойтись без remoteChild
    Здравствуйте, сделал меню, после нажатия на кнопку стоит обработчик и в зависимости от выбранного пункта меню выполняется вложенный класс

    ExpandedWrap disabled
      function clickHandler():void
      {
           switch(name)
           {
                case "start":
                var gameStart:Class = new gameStart();
                break;
           }
      }


    Содержимое gameStart.as

    ExpandedWrap disabled
      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).

    Объясню дополнительно еще проще.
    Хочу, чтобы после нажатия на кнопку переходило в новое окно, уже игровое/рейтинг/помощь и т.п.
    Вопрос может глупый, но я даже не смог сформулировать его для гугла, чтобы поискать решение там.

    Заранее очень признателен за любую помощь или намек.
      Кстати, тот вариант который я хотел применить, мне не подойдет, так как у меня помимо кнопок в интерфейсе и обычные статичные битмапы.

      ExpandedWrap disabled
        private function removeAllChildren():Boolean {
                for (var i:int = 0; i < this.numChildren; i++ {
                        this.removeChildAt(i);
                }
                return true;
        }


      Может подскажите, как же быть

      Добавлено
      Покрайней мере, удаляются не все Child
        Цитата diel @
        Покрайней мере, удаляются не все Child

        Развернуть цикл надо, так как каждый раз, когда ты вызываешь removeChildAt(x), у тебя изменяется количество дочерних элементов. А вообще можно проще:
        ExpandedWrap disabled
          while (numChildren>0) removeChildAt(0);
          Спасибо большое, именно такое решение ночью я и нашел, но остается еще вопрос. После очистки всех элементов, не получается вызовом нового класса создать любые другие элементы. Просто остается пустое окно. Подскажите пожалуйста, что я не так делаю?
            Мало кода для ответа на вопрос. Я подозреваю, что после создания объекта через new gameStart() ты забываешь его положить на экран через addChild(). Если нет, то проверь, не сразу ли его с экрана убирает очисткой.
              Вот например, рейтинг (тут не отрисовывается шапка например), сделал для теста. addChild есть.

              ExpandedWrap disabled
                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-ов и вызываю класс

              ExpandedWrap disabled
                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]
                Прошу прощения, стоило поспать пару часов и просто подумать, все исправил.

                ExpandedWrap disabled
                  case "rating":
                      Sounds.playSound(sndClick, 100, false);
                      removeAllChildren();
                      var r:rating = new rating();
                      addChild(r);
                  break;


                Благодарю за помощь!
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0330 ]   [ 15 queries used ]   [ Generated: 28.03.24, 18:24 GMT ]