|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.02.2010, 16:23 | #1 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Пересечение объектов. Проблема со скоростью движения
Здравствуйте. Про столкновения объектов было задано много вопросов, получено достаточное количество ответов. Я знаю, как сделать проверку пересечения одного объекта другим. В общем, я хотел бы спросить о следующем. Допустим, что на форме имеются два объекта - квадрата. Размер 25 на 25. Допустим, что один объект двигается со скоростью 30 пикселей каждые 10 мс. Вот здесь и возникает проблема. Если у первого объекта размер равен 25 на 25, то второй, с его перемещением в 30 px, просто "перелетит" первый объект. Получится, что с такой скоростью столкновения просто не будет и как определить, что оно было, я не знаю. Подскажите, как поступить, если скорость одного объекта больше чем размер другого? Спасибо за понимание.
|
27.02.2010, 16:49 | #2 |
Заблокирован
Старожил
Регистрация: 20.07.2008
Сообщений: 4,032
|
Все просто!
Ты не прибавляй сразу всю скорость, а прибавляй по частям, каждый раз делая проверку столкновения. Код:
Последний раз редактировалось Levsha100; 27.02.2010 в 16:53. |
27.02.2010, 16:51 | #3 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Ёлки. Голову мне отрубить. Точно ! =) Спасибо
|
27.02.2010, 16:56 | #4 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Только скорость должна быть для такого больше не размера квадрата, а суммы их размеров!
Я делал в случае столкновения откат на одну единичку назад до тех пор, пока столкновение не исчезало. Можно (и, пожалуй, даже нужно...) и впрямь делать и наоборот.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
02.03.2010, 20:06 | #5 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Но всё равно здесь не всё так гладко... В программе на форме есть компонент Timer с интервалом в 33 мс. Каждые 33 мс рисуется картинка, проверяется нажатие клавиш. Допустим пользователь нажимает клавишу со стрелкой влево. Двигаем объект на 1 px влево, и увеличиваем количество пикселей для движения. То есть, в следующий раз к скорости объекта прибавится уже 2, потом 3 и т.д. Применим твою проверку, Levsha100.
Код:
Спасибо за внимание. |
02.03.2010, 20:17 | #6 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
А зачем промежуточно рисовать? Обрабатывайте "промежутки" в памяти, а на экран выводите именно такую "частоту", которая требуется.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
02.03.2010, 20:28 | #7 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Я тебя не понимаю. Опять же вернёмся к объектам. Объект a движется со скоростью -50 px в 33 мс! В таймере мы должны подвинуть объект со скоростью 50 px... Я кажется нашёл решение, а что если скорость объекта 50 px, и через 45 он сталкивается с другим объектом. То мы прибавляем к позиции объекта 45 и останавливаем объект! Уря! =). Спасибо, Alex Cones, что натолкнул меня на эту мысль! Очень благодарен! =)
|
06.03.2010, 18:36 | #8 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Проблемы есть с проверкой столкновения. Объект сталкивается нормально, только если его позиция X или Y меньше чем позиция объекта X или Y. В остальных случаях объект наполовину "проваливается" в объект. Помогите пожалуйста, подскажите, что нужно делать. Спасибо
Последний раз редактировалось Манжосов Денис :); 06.03.2010 в 19:09. |
06.03.2010, 18:51 | #9 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Как вариант - сначала проверять, чей левый верхний угол выше, а чей - левее и исходя из этих четырех вариантов делать свою проверку. Я, когда столкнулся с такой же проблемой, решил, что этот первый вариант идет лесом, поэтому координатами объекта у меня были координаты его центра - тогда достаточно проверять, что (фрагмент моего кода - когда будет столкновение)
Код:
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
06.03.2010, 19:07 | #10 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Хм. Сейчас попробую подправить проект. Об изменениях напишу. Спасибо, Гром, за совет.
Да, не мог бы пояснить пожалуйста, что означают переменные LandPos, NewPos, LandSize, Size? Хотя, кажется понял уже. P.S. Не тот проект скинул... Последний раз редактировалось Манжосов Денис :); 06.03.2010 в 19:20. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
OpenGL. Проблема со скоростью передвижения объектов | Blade | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 5 | 26.10.2009 13:40 |
проблема создания массива объектов | Meduzza | Общие вопросы C/C++ | 3 | 28.05.2009 05:07 |
Проблема с автоматическим подключением библиотек объектов | iliy | Общие вопросы Delphi | 6 | 31.01.2009 06:39 |
Delphi: Проблема с созданием объектов | Omedus | Помощь студентам | 4 | 08.08.2008 18:42 |