Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему в контейнер не добавляются дети? (http://www.flasher.ru/forum/showthread.php?t=127342)

kaetano 11.07.2009 16:28

Почему в контейнер не добавляются дети?
 
Есть класс, в котором создается контейнер conеBube, в который добавляются элементы Buble. И не работает - не отображаются элементы. Если убрать контейнер, и просто добавлять в класс - то все работает.

Вот код:

Код AS3:

package src{
        import flash.display.*;
        import flash.utils.*;
        import flash.geom.*;
 
 
        public class Pipe extends MovieClip{;
        var COUNT_BUBLES:int;//Общее кол-во шариков на трубу
        var intBubles:Number=10;//Интервал между шариками
        private var intervalID:uint;//Для шариков
        private var intervalID2:uint;//Для заливки
        private var count:int;//счетчик для создаваемыз шариков
        private var delay:Number;
 
        private var bub1:Buble;
 
        public var sh:Shape;
        var myDate = new Date();
 
        public  var contBuble:MovieClip;
 
        public function Pipe() {
                contBuble = new MovieClip;
                contBuble.width = this.width;
                contBuble.height = this.height;
                addChild(contBuble);
 
        }
 
        public function deleteMoving() {
                while (contBuble.numChildren) contBuble.removeChildAt(0);
        }
 
        public function setMoving() {
 
 
 
                COUNT_BUBLES=int(this.width*2/intBubles);
                if (COUNT_BUBLES<=1) {
                        COUNT_BUBLES=1;
                }
 
                //С определенной периодичностью вызываем ф-ю, создающую шарики
                delay=int(250);
                intervalID=setInterval(createBubles,delay);
        }
 
        //Создаем шарики
        private function createBubles() {
                count++;
                var curX=0;
                var curY=this.height/2+Math.random();
 
                if (count<COUNT_BUBLES) {
                        //??????????? Вот это не работает!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        contBuble.addChild(new Buble(curX,curY,this.width,this.height,intBubles));
                } else if (count == COUNT_BUBLES) {
 
                        clearInterval(intervalID);
                }
        }
 
        private function fillWater() {
                if (sh.width<=this.width-2) {
                        sh.width+=intBubles;
                } else if (sh.width>=this.width-2) {
                        clearInterval(intervalID2);
                }
        }
}
}


cleptoman 11.07.2009 16:31

а сам контейнер добавлен на сцену?

kaetano 11.07.2009 16:52

Цитата:

Сообщение от cleptoman (Сообщение 834688)
а сам контейнер добавлен на сцену?

ага.
в конмтрукторе
Код AS3:

public function Pipe() {
                contBuble = new MovieClip;
                contBuble.width = this.width;
                contBuble.height = this.height;
                addChild(contBuble);
 
        }


etc 11.07.2009 16:57

Интересно, что вы хотели сказать вот этими строчками?

Код AS3:

                contBuble.width = this.width;
                contBuble.height = this.height;


cleptoman 11.07.2009 17:00

а мне кажется не очень он добавлен
contBuble = new MovieClip;
конструктор не так вызывается
contBuble = new MovieClip();

etc 11.07.2009 17:06

cleptoman, такая запись допустима. Хотя лично я бы руки поотрывал бы за отсутствие скобок.

kaetano 11.07.2009 17:18

Цитата:

Сообщение от __etc (Сообщение 834694)
Интересно, что вы хотели сказать вот этими строчками?

Код AS3:

                contBuble.width = this.width;
                contBuble.height = this.height;


Это я уже эсперементировала с размерами.... подумалось - вдруг из-за них....

За руки - согласна. упущение

etc 11.07.2009 17:28

Ну как минимум вы нулевую ширину и высоту бабблу передаете.

kaetano 11.07.2009 17:49

Цитата:

Сообщение от __etc (Сообщение 834701)
Ну как минимум вы нулевую ширину и высоту бабблу передаете.

Да, видимо в этом дело.
но теперь при новом вызове ф-ии setMoving не отображаются элементы Buble.
Т.е. один раз показываются, потом один раз удалаются и все.

Немного измененный код:
Код AS3:

package src{
        import flash.display.*;
        import flash.utils.*;
        import flash.geom.*;
 
 
        public class Pipe extends MovieClip{;
        var COUNT_BUBLES:int;//Общее кол-во шариков на трубу
        var intBubles:Number=10;//Интервал между шариками
        private var intervalID:uint;//Для шариков
        private var intervalID2:uint;//Для заливки
        private var count:int;//счетчик для создаваемыз шариков
        private var delay:Number;
 
        private var bub1:Buble;
 
        public var sh:Shape;
        var myDate = new Date();
 
        public  var contBuble:MovieClip;
 
        public function Pipe() {
                clearInterval(intervalID);
                contBuble = new MovieClip();
                addChild(contBuble);
 
        }
 
        public function deleteMoving() {
                while (contBuble.numChildren) contBuble.removeChildAt(0);
        }
 
        public function setMoving() {               
                COUNT_BUBLES=int(this.width*2/intBubles);
                if (COUNT_BUBLES<=1) {
                        COUNT_BUBLES=1;
                }
 
                //С определенной периодичностью вызываем ф-ю, создающую шарики
                delay=int(250);
                intervalID=setInterval(createBubles,delay);
        }
 
        //Создаем шарики
        private function createBubles() {
                count++;
                var curX=0;
                var curY=this.height/2+Math.random();
 
                if (count<COUNT_BUBLES) {
                        contBuble.addChild(new Buble(curX,curY,this.width,this.height,intBubles));
                } else if (count == COUNT_BUBLES) {
 
                        clearInterval(intervalID);
                }
        }
 
        private function fillWater() {
                if (sh.width<=this.width-2) {
                        sh.width+=intBubles;
                } else if (sh.width>=this.width-2) {
                        clearInterval(intervalID2);
                }
        }
}
}


etc 11.07.2009 18:02

Неудивительно, счетчик никто не сбрасывает.

kaetano 11.07.2009 18:17

Цитата:

Сообщение от __etc (Сообщение 834707)
Неудивительно, счетчик никто не сбрасывает.

Боже мой :o

СПАСИБо!!!!!


Часовой пояс GMT +4, время: 03:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.