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

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

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

Регистрация: Dec 2010
Сообщений: 6
Question Нужна помощь в "размножении" классов

Всем привет! Помогите новичку в простеньком.
Например есть такой код:
Код AS3:
 
package  
{
	import flash.display.Sprite;
 
 
	public class Shar extends Sprite
	{
		public var shar:Sprite = new Sprite();
		public function Shar() 
		{
			shar.graphics.beginFill (0x000000);
			shar.graphics.drawCircle (0, 0, 50);
			shar.graphics.endFill();
			addChild(shar);
 
 
		}
 
	}
 
}
В основном классе необходимо изпользовать несколько подобных шаров:,
Код AS3:
 
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			var ar:Array = new Array();
			for (var i:int = 0; i <10 ; i++) 
			{
 
			var shar:Shar = new Shar();	
			shar.x = i * 90;
			shar.y = 300;
			addChild(shar);
			ar.push(shar);
			}
			trace (ar);
 
			ar.forEach(move);
			function move():void 
			{
				shar.y = 50;
			}
 
		}
 
	}
 
}
Внимание вопрос: Как в дальнейшем управлять всеми шарами? получается управлять только одним (последним). Что я делаю неправильно? Как я понимаю привязка переменной к классу остается у последней.

Старый 01.12.2010, 14:09
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Убрать этот код:
Код AS3:
ar.forEach(move);
function move():void 
{
    shar.y = 50;
}
И написать отельную функцию, которая будет по ENTER_FRAME изменять положения шаров в массиве, допустим циклом.

Старый 01.12.2010, 14:15
medvedya2 вне форума Посмотреть профиль Отправить личное сообщение для medvedya2 Найти все сообщения от medvedya2
  № 3  
Ответить с цитированием
medvedya2
[+1 09.03.11]

Регистрация: Mar 2010
Сообщений: 128
сделай оглавление ar в классе а не в конструкторе.
ar[индекс] сылка на твой шар
Код AS3:
ar[0].x=100;
ar[0].y=100;
или
var myShar:Shar=ar[0];
myShar.x=100;
myShar.y=100;
это неверная конструкция:
Код AS3:
ar.forEach(move);
function move():void 
{
     shar.y = 50;
}
Добавлено через 4 минуты
лучше так:
Код AS3:
for each(var myShar:Shar in ar)
{
    myShar.y=50;
}


Последний раз редактировалось medvedya2; 01.12.2010 в 14:20.
Старый 01.12.2010, 14:33
ganjubazz вне форума Посмотреть профиль Отправить личное сообщение для ganjubazz Найти все сообщения от ganjubazz
  № 4  
Ответить с цитированием
ganjubazz

Регистрация: Dec 2010
Сообщений: 6
Цитата:
Сообщение от medvedya2 Посмотреть сообщение
сделай оглавление ar в классе а не в конструкторе.
ar[индекс] сылка на твой шар
Код AS3:
ar[0].x=100;
ar[0].y=100;
или
var myShar:Shar=ar[0];
myShar.x=100;
myShar.y=100;
это неверная конструкция:
Код AS3:
ar.forEach(move);
function move():void 
{
     shar.y = 50;
}
Добавлено через 4 минуты
лучше так:
Код AS3:
for each(var myShar:Shar in ar)
{
    myShar.y=50;
}
в Первом случае получается, в третьем нет, все равно срабатывает один послдений шар.
Хочетьа ко всем шарам привязать одну функцию. Не на статичных шарах конечно это покажу, но например выключить все таймеры во всех классах.

Старый 01.12.2010, 15:21
medvedya2 вне форума Посмотреть профиль Отправить личное сообщение для medvedya2 Найти все сообщения от medvedya2
  № 5  
Ответить с цитированием
medvedya2
[+1 09.03.11]

Регистрация: Mar 2010
Сообщений: 128
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
 
	public class Main extends Sprite 
	{
 
		private static var ar:Array = new Array();
		public function Main():void 
		{
			for (var i:int = 0; i <10 ; i++) 
			{
 
			var shar:Shar = new Shar();	
			shar.x = i * 90;
			shar.y = 300;
			addChild(shar);
			ar.push(shar);
			}
			trace (ar);
			moveShar();
 
		}
		private function moveShar():void
		{
			for each(var myShar:Shar in ar)
			{
   				 myShar.y=50;
			}
 
		}
 
	}
 
}
Но я бы сделал так:
Код AS3:
package  
{
	import flash.display.Sprite;
 
 
	public class Shar extends Sprite
	{
		public var shar:Sprite = new Sprite();
		public static var ar:Array=[];
		public function Shar() 
		{
			shar.graphics.beginFill (0x000000);
			shar.graphics.drawCircle (0, 0, 50);
			shar.graphics.endFill();
			addChild(shar);
			ar.push(this);
 
 
		}
 
 
		public static function  moveAllShar():void
		{
			for each(var myShar:Shar in ar)
			{
   				 myShar.y=50;
			}		
		}
 
	}
 
}
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			for (var i:int = 0; i <10 ; i++) 
			{
 
			var shar:Shar = new Shar();	
			shar.x = i * 90;
			shar.y = 300;
			addChild(shar);
			}
			trace (ar);
			Shar.moveAllShar();
 
		}
 
	}
 
}


Последний раз редактировалось medvedya2; 01.12.2010 в 15:29.
Старый 01.12.2010, 15:36
ganjubazz вне форума Посмотреть профиль Отправить личное сообщение для ganjubazz Найти все сообщения от ganjubazz
  № 6  
Ответить с цитированием
ganjubazz

Регистрация: Dec 2010
Сообщений: 6
Ага, спасибо большое вроде начинает получаться.

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

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

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


 


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


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