![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Цитата:
например структура: Главный контроллер - координирует всю движуху - главная вью (карта) - перемещается по экрану в зависимости от положения машинки (она ж скорее всего не влезет в экран) - главная модель (карта) - содержит в себе данные для отрисовки вью крты - текущие видимые тайлы к примеру, объекты на карте, прочая лабуда. - контроллер машинки - координирует свою маленькую движуху, общается с контроллером-папой -- модель машинки - скорость, параметры типа сколько топлива осталось и прочая -- вью машинки - ну собственно вью, целая, разбитая, пыль из-под колес если быстро едет и в таком духе. Слушает события пользователя ну и получается: - вью машинки: пользователь тыкнул влево - контроллер машинки: понял, рулим влево, слышь, главный контроллер, можно? - главный контроллер (лезет в модель уровня, сравнивает координаты машинки и карту) - можно, рулите - контроллер машинки: ок, спасибо, модель, обновить координаты - модель машинкиЖ слушаюсь, обновила, вью, меня поменяли - вью машинки: поворачиваюсь. - главный контроллер: модель, слышь, они в квадрате таком-то, отмечай. - главная модель: отметила, вью, слышь, меня обновили - главная вью: а сейчас мы вот так вот бочком повернемся и всё будет круто.
__________________
Кто к нам с чем для чего - тот у нас того от того. Последний раз редактировалось Dukobpa3; 12.05.2011 в 00:32. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Тут какие будут новые координаты решает главный контроллер, а не машинка. Потому что когда он определил, что машинке можно ехать, он проверил, что всё ок с её новыми координатами, почему бы их и не определить ему тогда сразу (когда говорит "можно, рулите"), чего два раза считать.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 12.05.2011 в 00:43. |
|
|||||
|
да, нужно в контроллер машинки переносить логику принятия решений относительно действий после пересечения со стенами, пересечения финиша итд
А пересечение финиша я вот как могу сделать В карте есть тайлы, которые используются для финиша public function get mapData():Object { var retObject:Object=new Object(); retObject.tiles=mapArray; retObject.tileBounds=new Rectangle(0,0,80,80); retObject.param_0_Speed=0; retObject.param_1_Speed=1; retObject.param_2_Speed=0.95; retObject.finishTiles=[{c:3,r:2},{c:3,r:3}]; return retObject; } модель машинки спрашивает у вью машинки прямоугольник машинки я я получу пересечение или нет этих 2х прямоугольников -De-, или Вы имели ввиду не такую геометрию ? |
|
|||||
|
Для уменьшения связанности. В перспективе с этой схемой которую я предложил можно хоть с десяток машинок добавить и каждая из них будет спокойно собой рулить, а главный контроллер будет просто давать добро и проворачивать карту куда надо.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Я имел в виду два отрезка - финишная черта и соединяющий предыдущее и следующее положение машинки. Вот смотрим, на их пересечение и в каком направлении оно, если есть.
http://users.livejournal.com/_winnie/152327.html - вот как такое делать. Направление пересечения, если я ничего не напутал (а тут могу) будет сидеть в знаке seg1_line2_start (а также в seg1_line2_end, seg2_line1_start и seg2_line1_end, просто надо понять, если оно больше 0, то это вперёд или назад %) Добавлено через 24 минуты Dukobpa3, для уменьшения связанности заставлять контроллер машинки пересчитывать? А если оно таки сколлайдилось? Кстати, похоже, что таки если машинок больше 1, то таки на машинке это дело не разрулить нормально, нужен кто-то сверху, карта или контроллер её/главный. Кстати, это вообще сверхдурная задача, рекомендуется физ. двиг взять. djyamato, у вас в коде магические числа. Это может даже похуже нарушения инкапсуляции. Потом не найдёте, что за что отвечает и что данное число обозначает. Простой тест на то, что число не магическое - если чтоб его поменять надо 'переписать всё нафик' или жить в другой вселенной, то число - не магическое. Если это какие-то размеры или скорость - вбить их в константы/переменные, не использовать напрямую.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 12.05.2011 в 01:14. |
|
|||||
|
Ну так реализаций море может быть.
К тому же если по правильному (а карта как говорилось выше - тайловая) то есть проходимые тайлы, есть непроходимые. То можно что-то придумать чтоб в модели машинки хранилось девять тайлов - сама машинка и вокруг нее. Тогда и главный контроллер разгрузить можно. Или же если главный контроллер будет это считать то пусть себе считает. Считать то особо нечего. пройтись по всем полученным данным от машинок с желаемыми новыми координатами, поглядеть какие новые координаты попадают в закрытые тайлы, выдать им отказ, остальным дать добро, всё. Там по сути не просчет будет а тупо сравнение - есть координаты тайла, поглядеть на проходимость/непроходимость, всё. Добавлено через 1 минуту К тому же ты сам написал что нужен кто-то "выше" вот этим "выше" и есть главный контроллер.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
...а если мы столкнулись, то просто резко встанем, даже не вплотную к препятствию, т.к. ничего больше мы не умеем (зато умеем тунеллировать сквозь углы и два раза считать положение), но архитектура правильная, ага.
Хранить (и обновлять постоянно, вот не было чем заняться) тайлы вокруг - не уменьшает связность! Машинка-шпион сможет обьехать всё поле и узнать инфу о всех актуальных тайлах! Не хотите подумать, как запретить ей это? =)) Может, пересоздавать её почаще, чтоб лишнего не знала - это уменьшит связность =)) Если есть кто-то выше, то он и определяет положение машинки. Сама она ничего потом не пересчитывает, вот о чём этот дурной спор %)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
как вариант можно машинку вообще без контроллера оставить
Сделать ее сугубо суб-вью))) Тогда и спор наш иссякнет. С одним контроллером и думать нечего кто чего считать будет ![]() Опять же повторюсь, вариантов реализаций может быть море. А спор действительно ни о чем.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
это в модели машинки, впоследствии, это перенеслось бы во вшнешний хмл как настройка машинки
protected var minSpeed:Number=0; protected var maxSpeed:Number=4; protected var carInitMaxSpeed:Number=4; protected var maxRotation:int=360; protected var nRotation:Number; protected var rotationAtSpeedKoeff:Number=1; protected var ptLoc:Point; protected var carColor:uint; private var speedObject:Object=new Object(); private var angleObject:Object=new Object(); private static const speedUpValue:Number=0.1; private static const speedDownValue:Number=-0.05; private static const steerLeftAngle:Number=-0.075; private static const steerRightAngle:Number=0.075; private var speedDownTweenDuration:Number=4; private var angleToZeroTweenDuration:Number=1; По поводу физ движка, это верно, я так и сделаю, хотелось хоть немного самому пошшупать. А для этой задачи какой лучше взять двиг ? box2D? Или что-нибудь другое ? Последний раз редактировалось djyamato; 12.05.2011 в 13:36. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:41. |
|
|
« Предыдущая тема | Следующая тема » |
|
|