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

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

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

Регистрация: Sep 2008
Сообщений: 102
По умолчанию Найти ближайший объект после удаления предыдущего

Всем привет. Как найти ближайший объект после удаления предыдущего ближайшего объекта.

Понятно что надо удалить мувиклип, удалить ближайший массив и заново отсортировать массивы и найти новый ближайший объект.

Логика понятна, но не могу написать рабочий код.

Исходник прикрепил.

Код AS1/AS2:
var enemyObjectsArray:Array = [];
 
/**
* Create Enemy
* ---------------
* This Method is used to create new enemy objects, 
* attach movieClips to them and set the enemyObject's properties like position
*/
function createEnemy(numberOfEnemies:Number):Void 
{
	//run a for loop to create numberOfEnemies
	for(var i = 0; i < numberOfEnemies; i++)
	{
		//attach a new enemy movieclip from the library
		var tempEnemy_mc:MovieClip = _root.attachMovie("enemy", "enemy"+_root.getNextHighestDepth(), _root.getNextHighestDepth());
 
		//set new enemy position
		tempEnemy_mc._x = random(Stage.width);
		tempEnemy_mc._y = random(Stage.height);
 
		//save object properties such as a reference to our movieClip on root, distance total, etc
		tempEnemy_obj = {myMc:tempEnemy_mc, distanceTotal:0, distanceY:0, distanceY:0}
 
		//add the enemy object to array
		enemyObjectsArray.push(tempEnemy_obj);
	}
}
 
/**
* Update Enemy
* ---------------
* This Method is used to calculate distance between objects in enemyObjectsArray
* and sort the array based on distanceTotal using the "sortOn" function
*/
function updateEnemies():Void
{
	//run a for loop on our array and update every enemy object in there
	for(var i = 0; i < enemyObjectsArray.length; i++)
	{
		//set temporary variables that we'll use to reference the enemy/target
		//enemy is an object
		var enemy:Object = enemyObjectsArray[i];
		//player_mc is a movieclip
		var target:MovieClip = player_mc;
 
		//To use movieClip method like gotoAndStop, gotoAndPlay, etc, 
		//we use the "myMc" parameter of our enemy object that we saved earlier.
		//The mc parameter is basically a "link" to the enemy movieClip on stage
 
		//tell movieclip to go to first frame
		enemy.myMc.gotoAndStop(1);
 
		//calculate distance between enemyObject's movieClip and target
		enemy.distanceX = target._x - enemy.myMc._x;
		enemy.distanceY = target._y - enemy.myMc._y;
 
		//get total distance as one number
		enemy.distanceTotal = Math.sqrt(enemy.distanceX * enemy.distanceX + enemy.distanceY * enemy.distanceY);
 
		//sort the array based on the enemy object's "distanceTotal" parameter
		enemyObjectsArray.sortOn("distanceTotal", Array.NUMERIC);
		//the first item in our array (enemyObjectsArray[0])
		//has the lowest distanceTotal value hense its the closest
		trace(distanceTotal);
		//tell the closest enemy movieClip to go to frame 2 to visually show that it's closest
		enemyObjectsArray[0].myMc.gotoAndStop(2);
	}
}
function reset():Void
{
	for(var i = 0; i < enemyObjectsArray.length; i++)
	{
		var tempEnemy_mc:MovieClip = enemyObjectsArray[i].myMc;
		tempEnemy_mc._x = random(Stage.width);
		tempEnemy_mc._y = random(Stage.height);
		trace(enemyObjectsArray);
	}
}
 
//add an onEnterFrame to repeat our updateEnemies function every frame
_root.onEnterFrame = function():Void
{
	updateEnemies();
}
 
 
//create some enemies
createEnemy(5);
 
 
//start/stop drag for player_mc
player_mc.onPress = function(){
	startDrag(this);
}
player_mc.onRelease = function(){
	stopDrag();
}
 
reset_btn.onRelease = function()
{
	reset();
}
Вложения
Тип файла: rar target-closest-enemy-movieclip.rar (16.2 Кб, 85 просмотров)

Старый 19.02.2015, 10:16
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 2  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Дайте определение "Ближайший объект".
Каков критерий? Координаты, индексы, имена, размеры, цвет, вес, вкус, запах?
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 19.02.2015, 18:15
sersir вне форума Посмотреть профиль Отправить личное сообщение для sersir Найти все сообщения от sersir
  № 3  
Ответить с цитированием
sersir
 
Аватар для sersir

Регистрация: Sep 2008
Сообщений: 102
В приложенном файле есть пример, там все понятно что значит "Ближайший объект"

Старый 20.02.2015, 00:18
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 4  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Мммм...... мне надо прочитать. код, вникнуть, что он делает, что куда как.....
Как-то слегка не охота.
Описать словами бы хотелось от вас видеть.

Что за ересь?
Давайте я вам сейчас портянку на 3000 строк вкину и вопрошу - "вроде все верно, но вот сокет падает иногда при таких-то транзакциях"....
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 21.02.2015, 03:52
sersir вне форума Посмотреть профиль Отправить личное сообщение для sersir Найти все сообщения от sersir
  № 5  
Ответить с цитированием
sersir
 
Аватар для sersir

Регистрация: Sep 2008
Сообщений: 102
Спасибо dark256, надо было просто написать enemyObjectsArray.shift(); и ближайший объект удалять enemyObjectsArray[0].myMc.removeMovieClip();

Старый 21.02.2015, 10:28
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 6  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Собственно, спасибо именно таки Вам ))))))
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

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

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

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


 


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


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