Показать сообщение отдельно
Старый 22.09.2013, 20:57
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 7  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Dip52 Вы всегда создаете такое количество циклов, констант и временных переменных? Особенно циклов. В прошлый раз было три... Я считаю оптимальным подходом, при работе с группой объектов, получать ссылки на них единожды и делать все вычисления на ходу пока не закончатся все преобразования и исчисления. Вы постоянно создаете "временные" массивы куда складываете результаты одной составной итерации всего действия.

Добавлено через 15 минут
Код AS3:
package madness.operation
{
	import flash.events.Event;
	import flash.display.MovieClip;
	import flash.geom.Point;
	import flash.display.Sprite;
	import madness.*;
	import flash.display.Shape;
 
	import madness.background.Fields;
 
	public class Aiming
	{
		private var enemies:Array = [];
		private var range:Number = 40;
		private var limit:Number = 20;
 
		public function Aiming()
		{
			//Создаю прицел:
			var wings:MovieClip = new Wings();
			wings.name = 'sight';
			wings.y = -200;
			Settings.wings.addChild(wings);
			Fields.FIELDFORWINGS.addChild(Settings.wings);
			//Создаю прицел:
 
			//Создаю мушку:
			var foresight:MovieClip = new Foresight();
			foresight.name = 'foresight';
			wings.addChild(foresight);
			//Создаю мушку:
 
			Settings.stage.addEventListener(Event.ENTER_FRAME,work);
		}
		public function work(event:Event):void
		{
			wingsMove();
			drawLimitAiming();
			const LENGTHENEMIES:int = Settings.rangers.length;
			const WINGS:MovieClip = MovieClip(Settings.wings.getChildByName('sight'));
			var clickPoint:Point=new Point(0, 0);
			var wingsPoint:Point = WINGS.localToGlobal(clickPoint);
			const FORESIGHT:MovieClip = MovieClip(WINGS.getChildByName('foresight'));
 
			var weakTarget:MovieClip;
 
			for(var e:int = 0; e < LENGTHENEMIES; e++)
			{
				const ENEMY:MovieClip = Settings.rangers[e];
				var onePoint:Point = new Point();
				var twoPoint:Point = new Point();
				var r:Number = Settings.wings.rotation*Math.PI/180;
 
				onePoint.x = ENEMY.x - wingsPoint.x;
				onePoint.y = ENEMY.y - wingsPoint.y;
 
				twoPoint.x = onePoint.x*Math.cos(r) - onePoint.y*Math.sin(r);
				twoPoint.y = onePoint.y*Math.sin(r) + onePoint.y*Math.cos(r);
 
				if(range >= getDistanceForesightAndTarget(twoPoint,new Point()) && limit > Math.abs(twoPoint.y))
				{
					if (!weakTarget || weakTarget.life<ENEMY.life) {
						weakTarget = ENEMY;
					}
 
					ENEMY.alpha = .5;
				}
				else
				{
					ENEMY.alpha = 1;
				}
			}
 
			if (weakTarget) {
 
				//  странная пляска с бубном над globalToLocal
 
				var cp:Point = new Point(0,0);
				var fPoint:Point = weakTarget.globalToLocal(cp);
 
				FORESIGHT.x = fPoint.x;
				FORESIGHT.y = fPoint.y;
 
			) else {
 
				FORESIGHT.x = 
				FORESIGHT.y = 0;
			}
 
		}
		//Метод рисования границ прицеливания:
		private function drawLimitAiming():void
		{
			var sight:MovieClip = MovieClip(Settings.wings.getChildByName('sight'));
			sight.graphics.clear();
			sight.graphics.lineStyle(1,0x00FFFF);
			//Верхняя линия:
			sight.graphics.moveTo(-range, -limit);
			sight.graphics.lineTo(range, -limit);
			//Нижняя линия:
			sight.graphics.moveTo(-range, limit);
			sight.graphics.lineTo(range, limit);
		}
		//Метод определения дистанции между мишенью и мушкой:
		private function getDistanceForesightAndTarget(foresight:Point,target:Point):Number
		{
			return Math.sqrt(Math.pow(foresight.x-target.x,2)+Math.pow(foresight.y-target.y,2));
		}
		//Движение крыльев:
		private function wingsMove():void
		{
			var wings:MovieClip = Settings.wings;
			var mainPersona:MovieClip = Settings.mainPersona;
			wings.x = mainPersona.x;
			wings.y = mainPersona.y;
			wings.rotation = mainPersona.rotation;
		}
	}
}
__________________
return this...


Последний раз редактировалось AlexCooper; 22.09.2013 в 21:46.