PDA

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


kirillvs85
05.11.2013, 10:33
Здравствуйте.

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

Вот сам класс MyBlock

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);
}

}
}
}


Вот тело мейна

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


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

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

MikroAcse
05.11.2013, 11:16
blockArr[i] = myBlock;
В данном случае Вы присваиваете blockArr[i] один и тот же мувиклип myBlock.

Пишите так:
blockArr[i] = new zagruz();
Кстати, классы пишутся с большой буквы.

kirillvs85
05.11.2013, 11:26
blockArr[i] = myBlock;
В данном случае Вы присваиваете blockArr[i] один и тот же мувиклип myBlock.

Пишите так:
blockArr[i] = new zagruz();
Кстати, классы пишутся с большой буквы.

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