|
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
определение ближайшей точки на оси
Из-за правого края экрана появляются объекты и движутся влево. Периодически скорость каждого из объектов произвольно меняется, таким образом объекты могут "обгонять" друг друга. Для обновления объектов у меня был такой вот код:
// Обновление объектов, вызываемое enter_frame private function update_ob(): void{ var obL:uint = _obs.length - 1 // все объекты при появлении заносятся в массив _obs // обновление каждого из объектов for (var i:int=obL;i>=0;i--){ var ob:Ob=_obs[i]; // заносим текущий объект в переменную для дальнейшего упоминания // убиваем или двигаем объект при помощи соответствующей функции obMove(ob, i); }; }; // Обновление объектов, вызываемое enter_frame private function update_ob(): void{ var obL:uint = _obs.length - 1 // все объекты при появлении заносятся в массив _obs var obx:Array = []; // массив с координатами объектов // обновление каждого из объектов for (var i:int=obL;i>=0;i--){ var ob:Ob=_obs[i]; // заносим текущий объект в переменную для дальнейшего упоминания // убиваем или двигаем объект при помощи соответствующей функции obMove(ob, i); obx.push(ob.x); // вносим в массив координаты врагов }; // определяем самого левого var minx:Number = Math.min.apply(null, enx); // в массиве с координатами находим наименьшее число // рисуем индикатор над ближайшим объектом (для проверки) _encl.x = minx; // _encl - объект класса Shape }; |
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
ну как минимум нужно использовать вектор вместо массива, а дельше нужно исходить из максимального количества врагов
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Почему бы не делать проверку сразу на ходу?
var minx:Number = _obs[obL].x; // обновление каждого из объектов for (var i:int=obL;i>=0;i--){ var ob:Ob=_obs[i]; // заносим текущий объект в переменную для дальнейшего упоминания // убиваем или двигаем объект при помощи соответствующей функции obMove(ob, i); if(ob.x < minx) minx = ob.x; }; _encl.x = minx; // _encl - объект класса Shape
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
Цитата:
А насчёт векторов, я уже неоднократно встречал мнение, что они быстрее массивов. Правильно ли я понимаю, что отличие массивов от векторов только в том, что в последние можно вносить только данные одного типа? (Если так, то я у меня все массивы можно перевести в векторы, но это я оставил на потом, когда буду заниматься оптимизацией) Спасибо за подсказку! Так действительно короче. Всё оказалось так лаконично - класс! Только пришлось добавить проверку длины массива, чтобы не возникало ошибки из-за отсутствия в нём элементов, когда враги ещё не появились: |
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
Да, это так.
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
Спасибо! Непонятно (даже после гугленья), но работает) Пошёл проверять, где ещё можно такое воткнуть, вместо того, чтобы проверять массив)
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
POSITIVE_INFINITY это константа класса Number, представляющая положительную бесконечность, то есть "число, больше которого не бывает" (на самом деле бесконечность не число конечно, но может сравниваться с числами). Соответственно первый же обрабатываемый циклом элемент запишет свой .х в minx.
Есть так же Number.NEGATIVE_INFINITY — "число, меньше которого не бывает", и MAX_VALUE и MIN_VALUE, самое большое и самое маленькое число, доступное для вычислений флэшплеера. "Больше" и "меньше" этих чисел только соответствующие бесконечности.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
это всё я понял, вот ключевая фраза, которая была мне нужна, чтобы разобраться в механизме действия этой константы в даннм случае:
... а пока число, обозначающее длину массива, не станет положительным, minx будет равняться положительной бесконечности (проверял через trace). Ещё раз спасибо! |
Часовой пояс GMT +4, время: 00:56. |
|
« Предыдущая тема | Следующая тема » |
|
|