Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2009, 11:57   #1
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
Вопрос Физика в 2D играх

Начал делать двухмерную игру (вид сбоку, как в марио и world of goo). Работаю над физикой.
Движется шарик по форме, прыгает, катается, отскакивает от краёв формы. Но вот проблема: как сделать так, чтобы шарик взаимодействовал не только с ровными вертикальными и горизонтальными стенами, но и со сложным рельефом. Например, как в одной из игр (не помню название) - рисуешь мышкой дорожку, по дорожке забираешься наверх.
Ещё хочу уточнить, как описать взаимодействие шара с другими шарами, квадратами и др. Важна сама логика, принципы. Заранее спасибо, мне это важно
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 02.12.2009, 13:28   #2
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

у меня у самого возникал такой вопрос. я придумал решение, оцените, насколько оно ламерское.
можно сделать матрицу всей карты (в двухмерный массив), и пересечение клеток разных объектов считать их взаимодействием. массив типа TType:
type
TType = record
ObjectIndex:integer;//номер объекта
Dinamo:integer;//сила взаимодействия
end;
anyx вне форума Ответить с цитированием
Старый 02.12.2009, 16:47   #3
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

Нет, не так. Матрица ни к чему, можно создать массив.

Теперь отвечу автору:
0) для начала сделай классы круг и линия (более сложные потом).
1) сделай массив (хотя лучше список, но для начала массив проще) из линий, кругов и т.д. - окружающий мир
2) взаимодействие круга с линией очень простое - угол падения равен углу отражения. Поищи математические выкладки в инете.
3) взаимодействие круга и круга тоже несложное. Прикладываю рисунок. Поясняю: через точку касания окружностей строится прямая, общая касательная, и столкновение обрабатывается об неё.
4) про прямоугольники ничего сказать не могу, про вращение тел тоже.
Изображения
Тип файла: jpg Безымянный.jpg (59.7 Кб, 598 просмотров)
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 02.12.2009, 17:09   #4
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Спасибо за ответ. Но тогда возникают ещё 2 вопроса:
1) как определить, является данный пиксель невидимым или видимым? (в BMP). Круг наполовину скрыт (Alpha-канал)
2) как определить угол падения на линию?
3) как создать класс круга и линии
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 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
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Огромное спасибо! Буду осваивать!
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 02.12.2009, 20:13   #7
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

я описал чисто физические основы, так как сам физические движки не делал.

автору:
1) откуда в BMP альфа-канал? и вообще для начала советую работать со стандартными фигурами TShape, а не с битмапами
2) с ходу не знаю, подумай сам
3) почитай про ООП
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 02.12.2009, 21:46   #8
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
как создать класс круга и линии
Советую все объекты делать через Pointer типы, то есть
Код:
Type
PType=^TType;
TType=record
//переменные типа
end;
Это позволяет удобней работать с объектами в игре, вообще почитай про это.
/////////
Если интересно вот пример с исходниками:
Вложения
Тип файла: rar PhysX.rar (175.0 Кб, 126 просмотров)

Последний раз редактировалось Вадим Буренков; 02.12.2009 в 21:52.
Вадим Буренков вне форума Ответить с цитированием
Старый 03.12.2009, 20:25   #9
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Почитал про uVectMath. Решил сделать программу, в которой не используется OMEGA engine, т.е. вычисляются координаты кругов и на форме отображается картинка с этими координатами. Возникает ошибка. Возможно я что-то не так понял. Вот исходник.
Вложения
Тип файла: rar Проект1.rar (190.8 Кб, 55 просмотров)
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 03.12.2009, 20:29   #10
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Демонстрация альфа-канала в ВМР
Изображения
Тип файла: bmp Shar.bmp (8.3 Кб, 252 просмотров)
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Физика в 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