|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.12.2009, 11:57 | #1 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Физика в 2D играх
Начал делать двухмерную игру (вид сбоку, как в марио и world of goo). Работаю над физикой.
Движется шарик по форме, прыгает, катается, отскакивает от краёв формы. Но вот проблема: как сделать так, чтобы шарик взаимодействовал не только с ровными вертикальными и горизонтальными стенами, но и со сложным рельефом. Например, как в одной из игр (не помню название) - рисуешь мышкой дорожку, по дорожке забираешься наверх. Ещё хочу уточнить, как описать взаимодействие шара с другими шарами, квадратами и др. Важна сама логика, принципы. Заранее спасибо, мне это важно
Не стыдно не уметь, стыдно не учиться.
|
02.12.2009, 13:28 | #2 |
Форумчанин
Регистрация: 10.09.2009
Сообщений: 352
|
у меня у самого возникал такой вопрос. я придумал решение, оцените, насколько оно ламерское.
можно сделать матрицу всей карты (в двухмерный массив), и пересечение клеток разных объектов считать их взаимодействием. массив типа TType: type TType = record ObjectIndex:integer;//номер объекта Dinamo:integer;//сила взаимодействия end; |
02.12.2009, 16:47 | #3 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
Нет, не так. Матрица ни к чему, можно создать массив.
Теперь отвечу автору: 0) для начала сделай классы круг и линия (более сложные потом). 1) сделай массив (хотя лучше список, но для начала массив проще) из линий, кругов и т.д. - окружающий мир 2) взаимодействие круга с линией очень простое - угол падения равен углу отражения. Поищи математические выкладки в инете. 3) взаимодействие круга и круга тоже несложное. Прикладываю рисунок. Поясняю: через точку касания окружностей строится прямая, общая касательная, и столкновение обрабатывается об неё. 4) про прямоугольники ничего сказать не могу, про вращение тел тоже.
Nobody expects Spanish Inquisition!
|
02.12.2009, 17:09 | #4 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Спасибо за ответ. Но тогда возникают ещё 2 вопроса:
1) как определить, является данный пиксель невидимым или видимым? (в BMP). Круг наполовину скрыт (Alpha-канал) 2) как определить угол падения на линию? 3) как создать класс круга и линии
Не стыдно не уметь, стыдно не учиться.
|
02.12.2009, 19:31 | #5 | |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
На самом деле физика которую привел Juffin не совсем правильная. То есть если все правильно сделать то и не плохо будет.
Цитата:
Существует точка масс тела. Это тип (PBody) который содержит координату, массу, угол поворота, силу мощность, момент инерции тела, а также указатели на все присоединенные к этому телу формы. Сами формы (PShape) это окружности (точка крепления в локальных координатах относительно PBody, радиус, трение и упругость), простые линии и полигоны (в PShape линий и полигонов содержатся координаты трение и упругость). При обраюотке тела обрабатываются все формы, закрепленные за этим телом. Обработка столкновений тел проходит по сложному алгоритму. Сначала проверяется зашло ли тело 1 в тело 2, потом математическими функциями высчитываются точки соприкосновений, высчитывется нормаль по которой тела выходят друг из друга, по значению масс и скоростей высчитывается ускорение придаваемое телам. При самой обработке используется куча дополнительных средств. Так что если хочешь нормальную физику в игру нужно использовать физический движок, хотя его освоить тоже нелегко. Я сам долго думал как сделать физику в игре: http://www.programmersforum.ru/showthread.php?t=47550 http://www.programmersforum.ru/showthread.php?t=58946 |
|
02.12.2009, 20:10 | #6 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Огромное спасибо! Буду осваивать!
Не стыдно не уметь, стыдно не учиться.
|
02.12.2009, 20:13 | #7 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
я описал чисто физические основы, так как сам физические движки не делал.
автору: 1) откуда в BMP альфа-канал? и вообще для начала советую работать со стандартными фигурами TShape, а не с битмапами 2) с ходу не знаю, подумай сам 3) почитай про ООП
Nobody expects Spanish Inquisition!
|
02.12.2009, 21:46 | #8 | |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Цитата:
Код:
///////// Если интересно вот пример с исходниками: Последний раз редактировалось Вадим Буренков; 02.12.2009 в 21:52. |
|
03.12.2009, 20:25 | #9 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Почитал про uVectMath. Решил сделать программу, в которой не используется OMEGA engine, т.е. вычисляются координаты кругов и на форме отображается картинка с этими координатами. Возникает ошибка. Возможно я что-то не так понял. Вот исходник.
Не стыдно не уметь, стыдно не учиться.
|
03.12.2009, 20:29 | #10 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Демонстрация альфа-канала в ВМР
Не стыдно не уметь, стыдно не учиться.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Физика в 2D играх | Вадим Буренков | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 32 | 02.11.2010 22:00 |
Искуственый интелект в играх | VintProg | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 26 | 01.08.2009 23:09 |
Сюжет в 2D играх | ZotaC | Свободное общение | 8 | 05.07.2009 15:42 |
Физика программы. | Манжосов Денис :) | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 1 | 09.05.2008 18:14 |
Анимация в играх | frai | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 4 | 25.11.2007 14:28 |