Показать сообщение отдельно
Старый 14.09.2013, 15:24
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 1  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
По умолчанию При удаление ненужных объектов из массива всё равно остаются ненужные объекты

Здравствуйте.

Цель: Сделать так, чтобы в определённом массиве были те объекты, которые находятся под прицелом.

Положение: Имеется два метода: один метод A добавляет в массив объекты, другой метод B проверяет какие объекты соприкасаются с прицелом и те, которые не соприкасаются удаляются.

Метод A:
Код AS3:
//Добавление всех врагов в массив:
private function additionEnemies():void
{
	const ENEMIESLENGTH:int = Aiming.enemies.length;
	for(var addition:int = 0; ENEMIESLENGTH> addition; addition++)
	{
		const FEEBLE:MovieClip = Aiming.enemies[addition];
		var are:Boolean = true;
		//Если аналогичного объекта нету в target, то:
		for each(var t:MovieClip in target)
		{
			if(FEEBLE== t)
			{
				are = false;
			}
		}
		//Добавляю объект.
		if(are)
		{
			target.push(FEEBLE);
		}
	}
}
Метод B:
Код AS3:
//Кто находится в области прицела:
private function beRegionEnemies():void
{
	const TARGETLENGTH:int = target.length;
	for(var addition:int = 0; addition < TARGETLENGTH; addition++)
	{
		const ENEMY:MovieClip = target[addition];
		var onePoint:Point = new Point();				//Определяю первую точку:
		var twoPoint:Point = new Point();				//Определяю вторую точку:
		var r:Number = -rotation*Math.PI/180;
 
		onePoint.x = ENEMY.x - x;
		onePoint.y = ENEMY.y - y;
 
		twoPoint.x = onePoint.x*Math.cos(r) - onePoint.y*Math.sin(r);
		twoPoint.y = onePoint.x*Math.sin(r) + onePoint.y*Math.cos(r);
 
		if(range >= getDistanceForesightAndTarget(twoPoint,new Point()) && limit > Math.abs(twoPoint.y))
		{
			ENEMY.deleted = false;
		}
		else
		{
			ENEMY.deleted = true;
		}
		target[addition] = ENEMY;
	}
 
	var ids:Array = [];
	for(var definition:int = 0; TARGETLENGTH > definition; definition++)
	{
		const DELETED:Boolean = target[definition].deleted;
		if(DELETED)
		{
			ids.push(definition);
		}
	}
	const IDSLENGTH:int = ids.length;
	for(var removal:int = 0; removal < IDSLENGTH; removal++)
	{
		const ID:int = ids[removal];
		target.splice(ID,1);
	}
	ids.splice(0,IDSLENGTH);
}
Проблема: Когда на сцене всего один объект, я навожу на него прицел и длина массива составляет 1, когда я убираю прицел с объекта, то длина соответственно становится 0. После того как добавляется второй объект длина массива уже автоматически становится равна 1, даже если я не навожу на объект прицел.

Вопрос: Как можно решить данную проблему?