Форум 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=146549)

p0okm 11.11.2010 04:15

как размножить родительскую картинку?
 
Пробую создать интерактивную сцену и упёрся в совершенно не понятную проблему.
Создаю базовую паркетную ячейку:
Код AS3:

package
{
        import flash.display.*;
 
        public class FonImg extends MovieClip
        {
                var square:Shape = new Shape();
 
                public function FonImg()
                {
                        square.graphics.lineStyle(5, 0x009900);
                        square.graphics.beginFill(0xff0000);
                        square.graphics.drawRoundRect (0, 0, 200, 200, 10, 10);
                        square.graphics.endFill();
                        addChild(square);
                }
        }       
}

Пытаюсь размножить её через занесение в ячейки массива:
Код AS3:

package
{
 
        public class FonParket extends FonImg
        {
                var fona:Array = new Array();               
 
                public function FonParket()
                {
                        for (var i:uint=0; i<3; i++)
                                {
                                        fona[i] = square;
                                        fona[i].x = i * 200;
                                }
                }
        }       
}

И дальше использовать уже набранный паркетный пол в главной сцене:
Код AS3:

package
{
        import flash.display.*;
 
        public class MainFon extends MovieClip
        {
        var bazFon:FonParket = new FonParket();               
 
                public function MainFon()
                {                       
                        addChild(bazFon);
 
                }
        }       
}

И к удивлению вижу, что отрисовывается только последняя паркетина занесённая в массив.:(
Помогите пожалуйста разобраться, что я не так делаю.

КорДум 11.11.2010 08:44

Код AS3:

package {
 
        public class FonParket extends Sprite {
                var fona:Array = new Array();               
 
                public function FonParket() {
                        for (var i:uint=0; i<3; i++) {
                                fona[i] = new FonImg();
                                fona[i].x = i * 200;
                        }
                }
        }       
}


alatar 11.11.2010 10:55

Как уже отметил КорДум, в массиве хранятся ссылки на объекты, если вы n-раз занесете ссылку в массив, объектов от этого больше не станет.

p0okm 11.11.2010 14:39

Спасибо, помогло.

p0okm 24.11.2010 05:23

В продолжение темы :(
Создав свой условный наборной паркетный пол решил его постоянно двигать, как конвейерную ленту. Дописал в класс исходной паркетины FonImg функцию проверки расположения и изменения её положения если вылезет далеко за окно отображения
Код AS3:

package
{
        import flash.display.*;
        import flash.events.Event;
 
        public class FonImg extends MovieClip
        {               
                public function FonImg()
                {
                        graphics.lineStyle(5, 0x000099);
                        graphics.beginFill(0xff0000);
                        graphics.drawRoundRect (0, 0, 200, 200, 40, 40);
                        graphics.endFill();
                        addEventListener(Event.ENTER_FRAME, Step_fonBground);
                        // вызываю функцию которая проверяет не ушёл ли мой квадрат за  -50 пиксел левее окна отображения
                        // и если ушёл то возвратить его в позицию 500 по X координате
                }
 
                function Step_fonBground(event:Event):void
                {
                        if (this.parent.x<= -50)
                        {
                                this.parent.x = 500;
                        }
                }               
        }       
}

Когда писал этот пост понял, что для того чтобы класс наборного пола FonParket не унаследовал функцию проверки расположения и изменения координаты Х паркетины
его нужно сделать не дочерним от FonImg, поэтому код изменил (а вот результат нет :( )
Код AS3:

package
{
        import flash.display.MovieClip;
 
        public class FonParket extends MovieClip
        {
                var fona:Array = new Array();
 
                public function FonParket()
                {                       
                        for (var i:uint=0; i<3; i++)
                                {
                                        var duplikat_FonImg:FonImg = new FonImg();
                                        fona[i] = duplikat_FonImg;
                                        fona[i].x = i * 200 + 100; // новый экземпляр класса FonImg установленный на 200 пиксел правее предыдущего
                                        addChild(this.fona[i]);    // таким образом набирая паркет из отдельных плиток
                                }
                }
        }       
}

И в корневом классе дописал саму функцию постоянного сдвига всего паркетного пола надеясь, что каждая отдельная паркетина достигнув координаты по Х -50 перескочит вправо на Х 500.
Код AS3:

package
{
        import flash.display.*;
        import flash.events.Event;
 
        public class MainFon extends MovieClip
        {
        var bazFon:FonParket = new FonParket();               
 
                public function MainFon()
                {                       
                        addChild(bazFon);
                        addEventListener(Event.ENTER_FRAME, Zsuv_fona);
                }
 
                function Zsuv_fona(event:Event):void
                {
                        bazFon.x = bazFon.x - 1; // каждый раз сдвигаю весь класс FonParket
                                                // состоящий из отдельных экземпляров класса FonImg на 1 пиксель
                                                // и надеюсь что когда bazFon.x станет -50, то первая плитка экземпляра класса FonImg
                                                // поменяет свою позицию на 500 по Х
                }
        }       
}

Но снова вышла загвоздка, на новую позицию по Х перепрыгивает не каждый отдельный экземпляр паркетины FonImg, а весь класс наборного пола FonParket.
Помогите разобраться пожалуйста.


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

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