|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.03.2013, 23:57 | #21 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Я уже описывал как найти приращение - вычесть из конечной точки начальную покоординатно и поделить на что-нибудь, что будет отвечать за скорость (например длина полученного отрезка (по пифагору), в итоге получим приращение по х и по у.
Перечитывайте давайте, а то видать не доходит с первого раза ) |
23.03.2013, 00:45 | #22 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
Перечитал..
Первая точка p1(0,0), вторая p2(5,12). Нам надо переместиться с первой во вторую по прямой линии. Вычитываем p2-p1=p3(5,12). Скорость(длинна вектора пи Пифагору) равна v=sqrt(5^2+12^2)=13. А как теперь р3 поделить на 13 ?
Спеши медленно.
|
23.03.2013, 01:47 | #23 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Длина вектора - это НЕ СКОРОСТЬ! Это - РАССТОЯНИЕ.
чтобы получить скорость, нужно расстояние разделить на время. В вашем случае, время можно брать игровое - условное - сколько нужно сделать шагов, чтобы из точки А попасть в точку B (впрочем, можно и наоборот, задать скорость движения - расстояние S1 - проходимое машинкой за один игровой такт. Пусть мы хотим, что машинка из пункта P1 переместилась в пункт P2 со скоростью 0.7 (взял наобум) точки за один игровой такт. Тогда: Цитата:
если что, получил я это таким кодом (на Паскаль, ничего другого под рукой нет): Код:
при выводе машинки на экран, её координаты X, Y нужно округлять до целых и выводить изображение по полученным ЦЕЛЫМ координатам... Последний раз редактировалось Serge_Bliznykov; 23.03.2013 в 01:49. |
|
23.03.2013, 02:41 | #24 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
Вот попробовал сделать тоже, что и Serge, но оно отрисовует только в одну сторону, т.е. только вправо смещает, а по У нет, к примеру.
Код:
Спеши медленно.
|
23.03.2013, 13:06 | #25 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Код:
|
23.03.2013, 14:11 | #26 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
phomm, у меня задание по предмету "ООП", разработать игру "Ралли по бездорожью", в которой есть классы "карта", "машина", "преграда". Игрок должен проехать от старта до финиша. Преграды: озера - надо объезжать, песок - можно ехать но скорость уменьшается в два раза, при том же расходе топлива. Запас топлива ограничен, а расход на 1км пропорционален квадрату скорости. Для управления используют стрелки вверх, вниз - ускоряют, замедляют машинку. А вначале игрок прокладывает маршрут, по которому поедет машинка.
Так вот. Я решил начать с малого и по немного собирать игру. Сначала придумал-реализовал как прокладывать маршрут, сейчас вот остановился на том, чтобы машинка двигалась по нему. А классы я думал сделать после того, как все уже будет работать. Или нет ?
Спеши медленно.
|
23.03.2013, 17:46 | #27 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
О, нет конечно. Классы лучше изначально делать, позже тоже можно, но рискуете потратить время и не собрать нормально.
Вот сейчас когда базовый принцип движения опробован, как раз удачный момент делать классы. Советую перечитать теорию и постараться сделать базовую функциональность на классах. Класс карты можно написать отдельно (хотя я бы сам ещё написал класс клетки, но можно ограничиться и простым признаком типа клетки), а классы преграды и машинки - в иерархии, один предок "объект на карте"и 2 объекта потомка - машинка и преграда, у них общие свойства класса - координаты на карте, реальные(вещественные) и в клектах. По клеткам делается проверка - наезд машинки в клетку с препятствием - будет проверяться просто сравнением координат клеток, а перемещение машинки во времени - по реальным координатам. Функция отрисовки будит просто по округленным реальным координатам выводить на экран , (а если бы был скроллинг карты, то нужен ещё расчёт сколько проскролено, чтобы правильно выводить объекты по пиксельным координатам). Лично я бы ещё завёл класс менеджера игры - который бы хранил все игровые сущности и общался с формой один, а не через несколько разрозненных классов. Также исходя из задачи можно сделать класс трассы - она бы хранила список точек, а также что-то вспомогательное, например, запрет случая постановки отрезка трассы через клетку с препятствием. |
23.03.2013, 18:20 | #28 | |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
Цитата:
Кстати карта - обычная картинка загруженная в пикчербокс.
Спеши медленно.
|
|
23.03.2013, 22:06 | #29 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Разбиение на клетки относительно просто - либо самому рассчитать и просто разлиновать пикчербокс, либо использовать датагрдвью, но как он с графической рисовкой - затрудняюсь сказать, не пробовал, но по идее должен.
Каждая клетка будет иметь тип, это можно хранить в виде массива в классе карты, при отрисовке по типу делать соответствующий рисунок, при прохождении машинки - соответственно менять ей характеристики. |
23.03.2013, 23:51 | #30 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
phomm, что-то не пойму почему код не работает как надо. Я ставлю первую точку по середине карты, а вторую выше правее. И оно двигает(рисует зеленым цветом) только по Х, т.е. по значение У он не изменят и выходит просто горизонтальная прямая.
Код:
Код:
Спеши медленно.
Последний раз редактировалось asmars; 24.03.2013 в 02:24. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Управление игрушечной машинкой с компьютера | 8Observer8 | C# (си шарп) | 11 | 26.10.2012 17:27 |
Управление 2 экранами | Alexandr555 | Компьютерное железо | 13 | 06.07.2011 22:30 |
Управление | Костян 98 | Общие вопросы Delphi | 21 | 30.05.2011 16:31 |
Управление памятью | ilham | Операционные системы общие вопросы | 2 | 17.12.2008 18:29 |