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

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

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

Регистрация: May 2012
Сообщений: 166
Вот в вашем примере аналогично идет постоянное создание shadow_mc без зачистки лишних теней, таким образом образуется шлейф от тени на сцене. А как сделать так чтобы отслеживание было постоянным и создание shadow_mc было либо единичным, либо контролировалось количество экземпляров на сцене путем удаления лишних.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

Старый 02.09.2012, 14:33
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 12  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Надо класс писать, который все объекты должны расширять. В этом классе описать методы для добавления тени и удаления.Вы же не собираетесь из главного класса запихивать один и тот же мувик во все объекты? Тень же у всех разная, да и анимироваться должна, показывать ходьбу и прочее вместе с объектом. Тут нет смысла пытаться сделать "сначала по-простому". Класс, методы в любом случае нужны сразу.
При сортировке, во внешнем цикле, когда берете объект из массива сразу вызываете у него удалитьТени(), например. А потом уже запускаете цикл по источникам и в нем добавляете новые тени.
Но я бы так наверное не стал делать. А может, и стал бы) Собственно, для такого приложения лучше MVC использовать. Но это Вам уже не раз говорили.
__________________
Reality.getBounds(this);

Старый 03.09.2012, 21:32
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 13  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Мозг сломал... моих знаний недостаточно, чтобы осилить этот эффект в полной мере.
В данный момент единственное на что меня хватило это сделать динамические тени всех объектов относительно только 1го источника света... и то эти тени появляются в единственном экземпляре(для каждого объекта) по мере появления объектов на сцене т.е. через ADDED_TO_STAGE.
Можно ли хотя бы как то сделать приоритет между источниками света на который будут реагировать тени?
Условие: какой источник света ближе. относительно того и будут реагировать тени.
Как такое условие может выглядеть, если уже есть условие: если источник находится ближе 600 пикселей проявляется тень(уровень alpha меняется) и искажается относительно этого источника.
Как бы легко написать условие если речь идет об простых объектах, но в моем случает речь идет о массивах в циклах..
и такой вид работать не будит:
Код AS3:
if ((Point.distance(enAllPoint[i],lsAllPoint[q]) <= 600) && ((Point.distance(enAllPoint[i],lsAllPoint[q])<(Point.distance(enAllPoint[i],lsAllPoint[q])))
//или
if ((Point.distance(enAllPoint[i],lsAllPoint[q]) <= 600) && ((Point.distance(enAllPoint[i],lsAllPoint[q])<(Point.distance(enAllPoint[i],lsAllPoint[w])))
//enAllPoint - точки всех объектов от которых идет тень
//lsAllPoint- точки всех источников света
А вообще вот весь код.
Код AS3:
		public function svetit(e:Event):void
		{
			for (var i:int=0; i<enAllPoint.length; i++)
			{
				enAllPoint[i] = new Point(enAll[i].x,enAll[i].y);
				Shadows.shAll[i].x = enAllPoint[i].x;
				Shadows.shAll[i].y = enAllPoint[i].y-1;
				for (var q:int=0; q<lsAllPoint.length; q++)
				{
					lsAllPoint[q] = new Point(lsAll[q].x,lsAll[q].y);
					if (Point.distance(enAllPoint[i],lsAllPoint[q]) <= 600)
					{
 
						mAngle = Math.atan2(lsAllPoint[q].y - Shadows.shAll[i].y,lsAllPoint[q].x - Shadows.shAll[i].x) * 180 / Math.PI;
						dAngle = Shadows.shAll[i].rotation - mAngle;
						if (dAngle > 180)
						{
						dAngle = -360 + dAngle;
						}
						else if (dAngle < -180)
						{
						dAngle = 360 + dAngle;
						}
						if (Math.abs(dAngle) < rotationSpeed)
						{
						Shadows.shAll[i].rotation -=  dAngle;
						}
						else if (dAngle > 0)
						{
						Shadows.shAll[i].rotation -=  rotationSpeed;
						}
						else
						{
						Shadows.shAll[i].rotation +=  rotationSpeed;
 
						}
						var lightX:Number = lsAllPoint[q].x;
						var lightY:Number = lsAllPoint[q].y;
						if (enAllPoint[i].x > lightX)
						{
						Shadows.shAll[i].scaleX = 1+((enAllPoint[i].x-lightX)/200);
						}
						else
						{
						Shadows.shAll[i].scaleX = 1+((lightX-enAllPoint[i].x)/200);
						}
						shadowB = enAllPoint[i].x - lightX;
						shadowA = enAllPoint[i].y - lightY;
						shadowC= Math.sqrt((shadowA*shadowA)+(shadowB*shadowB));
						Shadows.shAll[i].alpha =(lightArea/shadowC)-lightPower;
					}
					else
					{
						Shadows.shAll[i].alpha =0;
					}
				}
			}
		}
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

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

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

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


 


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


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