![]() |
Как отследить что машинка проехала 1,2,3 круга ?
Здравствуйте
есть у меня тайловая карта (двухмерный массив) есть машинка, которая ездеет по ней. Проехать, естественно, может только по тем тайлам, у которых значение=1 Так вот, я не могу придумать как мне отследить событие проезда через финишный тайл (к примеру) вот флэшка P.S. машинка это MVC (взял урок из книжки OReilly ActionScript.3.0 Design Patterns, начиная со страницы 457) и немного переделал Карта это Vew |
Отчертите стартовую (она же финишная) прямую (отрезок). Считайте сколько раз и в каком направлении она пересечена.
|
hitTest - ом ?
|
Геометрией.
|
понятно, спасибо
и еще тогда у меня вопрос, а кому лучше следить за пересечением этого отрезка, машинке или карте ? |
Впринципе пофигу только если трасса закольцована то чекпоинт должен быть не один а несколько, и отслеживать порядок пересечения оных, а то если только финиш/старт - то можно будет обмануть пару раз не сходя со старта туда-сюда проехав.
|
Явно логичнее карте. Кто у вас решает, какое следующее положение у машинки?
|
модель (Model) машинки решает куда она едет и не встречает ли препятствия
Добавлено через 1 минуту Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
например структура: Главный контроллер - координирует всю движуху - главная вью (карта) - перемещается по экрану в зависимости от положения машинки (она ж скорее всего не влезет в экран) - главная модель (карта) - содержит в себе данные для отрисовки вью крты - текущие видимые тайлы к примеру, объекты на карте, прочая лабуда. - контроллер машинки - координирует свою маленькую движуху, общается с контроллером-папой -- модель машинки - скорость, параметры типа сколько топлива осталось и прочая -- вью машинки - ну собственно вью, целая, разбитая, пыль из-под колес если быстро едет и в таком духе. Слушает события пользователя ну и получается: - вью машинки: пользователь тыкнул влево - контроллер машинки: понял, рулим влево, слышь, главный контроллер, можно? - главный контроллер (лезет в модель уровня, сравнивает координаты машинки и карту) - можно, рулите - контроллер машинки: ок, спасибо, модель, обновить координаты - модель машинкиЖ слушаюсь, обновила, вью, меня поменяли - вью машинки: поворачиваюсь. - главный контроллер: модель, слышь, они в квадрате таком-то, отмечай. - главная модель: отметила, вью, слышь, меня обновили - главная вью: а сейчас мы вот так вот бочком повернемся и всё будет круто. |
Тут какие будут новые координаты решает главный контроллер, а не машинка. Потому что когда он определил, что машинке можно ехать, он проверил, что всё ок с её новыми координатами, почему бы их и не определить ему тогда сразу (когда говорит "можно, рулите"), чего два раза считать.
|
да, нужно в контроллер машинки переносить логику принятия решений относительно действий после пересечения со стенами, пересечения финиша итд
А пересечение финиша я вот как могу сделать В карте есть тайлы, которые используются для финиша Код AS3:
модель машинки спрашивает у вью машинки прямоугольник машинки я я получу пересечение или нет этих 2х прямоугольников -De-, или Вы имели ввиду не такую геометрию ? |
Для уменьшения связанности. В перспективе с этой схемой которую я предложил можно хоть с десяток машинок добавить и каждая из них будет спокойно собой рулить, а главный контроллер будет просто давать добро и проворачивать карту куда надо.
|
Я имел в виду два отрезка - финишная черта и соединяющий предыдущее и следующее положение машинки. Вот смотрим, на их пересечение и в каком направлении оно, если есть.
http://users.livejournal.com/_winnie/152327.html - вот как такое делать. Направление пересечения, если я ничего не напутал (а тут могу) будет сидеть в знаке seg1_line2_start (а также в seg1_line2_end, seg2_line1_start и seg2_line1_end, просто надо понять, если оно больше 0, то это вперёд или назад %) Добавлено через 24 минуты Dukobpa3, для уменьшения связанности заставлять контроллер машинки пересчитывать? А если оно таки сколлайдилось? Кстати, похоже, что таки если машинок больше 1, то таки на машинке это дело не разрулить нормально, нужен кто-то сверху, карта или контроллер её/главный. Кстати, это вообще сверхдурная задача, рекомендуется физ. двиг взять. djyamato, у вас в коде магические числа. Это может даже похуже нарушения инкапсуляции. Потом не найдёте, что за что отвечает и что данное число обозначает. Простой тест на то, что число не магическое - если чтоб его поменять надо 'переписать всё нафик' или жить в другой вселенной, то число - не магическое. Если это какие-то размеры или скорость - вбить их в константы/переменные, не использовать напрямую. |
Ну так реализаций море может быть.
К тому же если по правильному (а карта как говорилось выше - тайловая) то есть проходимые тайлы, есть непроходимые. То можно что-то придумать чтоб в модели машинки хранилось девять тайлов - сама машинка и вокруг нее. Тогда и главный контроллер разгрузить можно. Или же если главный контроллер будет это считать то пусть себе считает. Считать то особо нечего. пройтись по всем полученным данным от машинок с желаемыми новыми координатами, поглядеть какие новые координаты попадают в закрытые тайлы, выдать им отказ, остальным дать добро, всё. Там по сути не просчет будет а тупо сравнение - есть координаты тайла, поглядеть на проходимость/непроходимость, всё. Добавлено через 1 минуту К тому же ты сам написал что нужен кто-то "выше" вот этим "выше" и есть главный контроллер. |
...а если мы столкнулись, то просто резко встанем, даже не вплотную к препятствию, т.к. ничего больше мы не умеем (зато умеем тунеллировать сквозь углы и два раза считать положение), но архитектура правильная, ага.
Хранить (и обновлять постоянно, вот не было чем заняться) тайлы вокруг - не уменьшает связность! Машинка-шпион сможет обьехать всё поле и узнать инфу о всех актуальных тайлах! Не хотите подумать, как запретить ей это? =)) Может, пересоздавать её почаще, чтоб лишнего не знала - это уменьшит связность =)) Если есть кто-то выше, то он и определяет положение машинки. Сама она ничего потом не пересчитывает, вот о чём этот дурной спор %) |
как вариант можно машинку вообще без контроллера оставить;) Сделать ее сугубо суб-вью))) Тогда и спор наш иссякнет. С одним контроллером и думать нечего кто чего считать будет ;)
Опять же повторюсь, вариантов реализаций может быть море. А спор действительно ни о чем. |
это в модели машинки, впоследствии, это перенеслось бы во вшнешний хмл как настройка машинки
Код AS3:
По поводу физ движка, это верно, я так и сделаю, хотелось хоть немного самому пошшупать. А для этой задачи какой лучше взять двиг ? box2D? Или что-нибудь другое ? |
| Часовой пояс GMT +4, время: 08:27. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.