Показать сообщение отдельно
Старый 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;
					}
				}
			}
		}
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.