Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Определение элементов массива в зоне (http://www.flasher.ru/forum/showthread.php?t=207886)

Godwarlock 15.05.2014 01:01

Определение элементов массива в зоне
 
Подскажите метод или функцию для определения элементов объектов в массиве, окружающие другой объект в радиусе 150? По сути надо создать отдельный массив, куда будут записываться элементы другого массива в радиусе 150, но что-то не представляю как сделать. Буду очень благодарен

GBee 15.05.2014 04:03

Код AS3:

private var _elems:Array = [ваши объекты];
private var _ao:Object = {x:19, y:82}; //другой объект
private var _needs:Array = _elems.filter(radiusFilter);
 
 
private function radiusFilter(e:Object, index:int, arr:Array):Boolean
{
  var xx:Number = e.x - _ao.x;
  var yy:Number = e.y - _ao.y;
  return Math.sqrt(xx * xx + yy * yy) <= 150;
}


caseyryan 15.05.2014 11:15

Цитата:

Сообщение от GBee (Сообщение 1165862)
Код AS3:

private var _elems:Array = [ваши объекты];
private var _ao:Object = {x:19, y:82}; //другой объект
private var _needs:Array = _elems.filter(radiusFilter);
 
 
private function radiusFilter(e:Object, index:int, arr:Array):Boolean
{
  var xx:Number = e.x - _ao.x;
  var yy:Number = e.y - _ao.y;
  return Math.sqrt(xx * xx + yy * yy) <= 150;
}


Только вот я не понял зачем у тебя там параметры index и arr, если они не используются? ;)

Zebestov 15.05.2014 11:24

Как минимум лучше так:
Код AS3:

return (xx * xx + yy * yy) <= 22500; // 150 * 150

:)

Inet_PC 15.05.2014 11:27

Цитата:

Только вот я не понял зачем у тебя там параметры index и arr, если они не используются?
Из хелпа:
Цитата:

callback:Function — The function to run on each item in the array. This function can contain a simple comparison (for example, item < 20) or a more complex operation, and is invoked with three arguments; the value of an item, the index of an item, and the Array object:
function callback(item:*, index:int, array:Array):Boolean;

GBee 15.05.2014 11:56

Цитата:

Как минимум лучше так
:о) ну да

caseyryan 15.05.2014 13:29

Цитата:

Сообщение от Inet_PC (Сообщение 1165865)

Я тупанул, не посмотрел выше, что там array.filter )

GBee 15.05.2014 14:20

Цитата:

Я тупанул, не посмотрел выше, что там array.filter )
Я уж подумал о каких хитростях, чтобы их не писать. Потому, что два последних параметра никогда не использую, но постоянно их путаю местами, что бесит :о)

ChuwY 15.05.2014 14:38

Цитата:

Сообщение от GBee (Сообщение 1165873)
Я уж подумал о каких хитростях, чтобы их не писать. Потому, что два последних параметра никогда не использую, но постоянно их путаю местами, что бесит :о)

Можно писать так:
Код AS3:

private function radiusFilter(e:Object, ...rest):Boolean
{
  //...
}

Или так:
Код AS3:

private function radiusFilter(e:Object):Boolean
{
  arguments;
  //...
}

Но не нужно, тк течет.


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

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