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

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

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

Регистрация: May 2009
Сообщений: 34
По умолчанию как размножить родительскую картинку?

Пробую создать интерактивную сцену и упёрся в совершенно не понятную проблему.
Создаю базовую паркетную ячейку:
Код 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
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код 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;
			}
		}
	}	
}
__________________
тут я

Старый 11.11.2010, 10:55
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 3  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Как уже отметил КорДум, в массиве хранятся ссылки на объекты, если вы n-раз занесете ссылку в массив, объектов от этого больше не станет.

Старый 11.11.2010, 14:39
p0okm вне форума Посмотреть профиль Отправить личное сообщение для p0okm Найти все сообщения от p0okm
  № 4  
Ответить с цитированием
p0okm

Регистрация: May 2009
Сообщений: 34
Спасибо, помогло.

Старый 24.11.2010, 05:23
p0okm вне форума Посмотреть профиль Отправить личное сообщение для p0okm Найти все сообщения от p0okm
  № 5  
Ответить с цитированием
p0okm

Регистрация: May 2009
Сообщений: 34
В продолжение темы
Создав свой условный наборной паркетный пол решил его постоянно двигать, как конвейерную ленту. Дописал в класс исходной паркетины 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.
Помогите разобраться пожалуйста.


Последний раз редактировалось p0okm; 24.11.2010 в 14:59.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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