Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.11.2013, 10:33
kirillvs85 вне форума Посмотреть профиль Отправить личное сообщение для kirillvs85 Найти все сообщения от kirillvs85
  № 1  
Ответить с цитированием
kirillvs85

Регистрация: Oct 2013
Сообщений: 2
Question Выводится на сцену только один элемент массива, вместо всех.

Здравствуйте.

Создал класс, который выводил на стейдж битмапу и исправно работал, выводил в случайном месте по 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 во время формирования массива.

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

Старый 05.11.2013, 11:16
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 2  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Код AS3:
blockArr[i] = myBlock;
В данном случае Вы присваиваете blockArr[i] один и тот же мувиклип myBlock.

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

Старый 05.11.2013, 11:26
kirillvs85 вне форума Посмотреть профиль Отправить личное сообщение для kirillvs85 Найти все сообщения от kirillvs85
  № 3  
Ответить с цитированием
kirillvs85

Регистрация: Oct 2013
Сообщений: 2
Цитата:
Сообщение от MikroAcse Посмотреть сообщение
Код AS3:
blockArr[i] = myBlock;
В данном случае Вы присваиваете blockArr[i] один и тот же мувиклип myBlock.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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