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

kirillvs85 05.11.2013 10:33

Выводится на сцену только один элемент массива, вместо всех.
 
Здравствуйте.

Создал класс, который выводил на стейдж битмапу и исправно работал, выводил в случайном месте по x и постоянном по y. Далее мне нужно было создать несколько таких изображений выводившихся на стейдже со случайными координатами по Х и постоянными по Y.
Один из вариантов решение было создать в мейне массив, в который запихнуть ссылки на нужное мне количество экземпляров этого класса.
Но захотелось как то разгрузить мейн класс от дополнительного кода и массивов и решил я сделать так, что бы нужное мне количество битмапов загружалось и выводилось на стейдж внутри самого класса, количество должно задаваться через конструктор класса. То есть используем только один экземпляр класс с единственным параметром - количеством нужных нам изображений.

Вот сам класс MyBlock
Код AS3:

package
{
        import *.*; // Код пишу по памяти, поэтому опущу некоторые подробности.
 
 
        public class MyBlock extends sprite
        {
                [emded...] // тут подгружаю png изображение...
                private var zagruz:class;
                private var myBlock:bitmap = new zagruz;
                private var blockArr:Array = new Array();
                private var myBlockX:number = Math.floor(Math.random()*700);
                private var myBlockY:number = 300;
                private var objNum:uint;
 
                public function MyBlock(_objNum):void
                {
                        objNum = _objNum;
                        addEventListener(event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:event):void
                {
                        removeEventListener(event.ADDED_TO_STAGE, init);
                        for (var i:uint = 0; i < objNum; i++)
                        {
                                blockArr[i] = myBlock;
                                blockArr[i].x = myBlockX;
                                blockArr[i].y = myBlockY;
                                addChild(blockArr[i]);
                                trace(blockArr[i].x);                                 
                        }
 
                }
        }
}

Вот тело мейна
Код AS3:

private var myBlock:MyBlock = new MyBlock(5); // добавляю 5 битмапов на сцену
addChild(myBlock);

Собственно в результате выводится одно единственное изображение, как я в дальнейшем понял выводится только последний элемент массива.
Трейс показывает разные значения для blockArr[i].x во время формирования массива.

Собственно вопрос: в чем может быть проблема? Возможна ли вообще такая реализация? Может быть я просто что то недопонимаю?

MikroAcse 05.11.2013 11:16

Код AS3:

blockArr[i] = myBlock;

В данном случае Вы присваиваете blockArr[i] один и тот же мувиклип myBlock.

Пишите так:
Код AS3:

blockArr[i] = new zagruz();

Кстати, классы пишутся с большой буквы.

kirillvs85 05.11.2013 11:26

Цитата:

Сообщение от MikroAcse (Сообщение 1151248)
Код AS3:

blockArr[i] = myBlock;

В данном случае Вы присваиваете blockArr[i] один и тот же мувиклип myBlock.

Пишите так:
Код AS3:

blockArr[i] = new zagruz();

Кстати, классы пишутся с большой буквы.

Спасибо, я как то до этого не додумался. Попозже попробую, как доберусь до дома.
Классы я всегда пишу с большой буквы, но именно в этой ситуации zagruz я не воспринимаю как класс, а просто как промежуточный вариант для загрузки изображений, но на будущее учту :)


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

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