HLFX.Ru Forum
Показать все 14 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Реализация физики для 2d объектов (https://hlfx.ru/forum/showthread.php?threadid=1760)


Отправлено SanYa 16-03-2009 в 14:00:

Реализация физики для 2d объектов

Давненько уже пишу на ActionScript 2.0, недавно задался идеей реализовать физику для объектов сцены, но понимаю в этом не слишком много, хотелось бы у вас спросить, каков вообще принцип написания физики (для 2д объектов), представляю себе это так: нужно описать несколько классов стандартных объектов (круг, квадрат, треугольник), в классе должен присутствовать вектор скорости и различные силы действующие на объект, которые будут каждый кадр просчитываться и изменять вектор скорости, так же нужно просчитывать углы поворотов объектов и самое главное - столкновения.

По сути прошу описать схему, по которой будут происходить рассчеты и изменения каждый кадр.

Если знаете ресурсы, где описывается это дело, буду очень признателен ссылочке (было бы хорошо, если ресурс на русском, но и английскому тоже буду рад).

зы: о существовании готовых движков знаю, но не хочу их по 2м причинам: они на AS3 и хочется разобраться самому.

В общем, за любую информацию буду благодарен.

__________________
кто к нам с чем зачем, тот от того и того...


Отправлено Дядя Миша 16-03-2009 в 16:17:

Гугли 2D physic. Собственно физика состоит из двух частей - симулятора и коллижен детектора. Для 2D написать коллижен детектор достаточно просто. Физика - обычные уравнения из школьного курса.
Силы, действующие на тело.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено George 16-03-2009 в 19:21:

Начну сразу с плохого: во Flash (по крайней мере MX) крайне тяжело, а порой невозможно (однако не буду полностью отрицать) создать полноценную, честную, нетормознутую физику. И почему же?
1. Относительное небыстродействие Flash-а.
2. Ограничение на разрядность чисел (насколько помню - 17 разрядов, причем 4 из них занимает E+65 (К примеру)).
3. Ограничение на время выполнение скрипта (15 секунд на кадр) - но это скорее всего для расчетов, но не для демонстраций.
4. До тех пор, пока скрип не выполнится, кадр не сменится. Т.е. даже если стоит 120 кадр/сек, то реально может быть намного меньше, или, еще понятнее, значение кадр/сек - это верхнее ограничение для скорости воспроизведения.

Но! Если цель - получение опыта, а именно необходимых алгоритмов реализации физики, то Flash почти идеально (если не замахиваться на большое) подходит для этого, т.к. можно быстро увидеть результаты своей работы.

В качестве ресурса, где можно найти много интересных вещей, посоветовал бы flasher.ru

Ну и напоследок, архивчик с разными физическими (+1 математика) демонстрациями, с которыми я когда-то баловался. К каждой демонстрации приложен текстовый файл с некоторыми комментариями. Собственно архив:


Отправлено Дядя Миша 16-03-2009 в 20:49:

George на флэше отличные рагдоллы получаются, зря ты так.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено George 17-03-2009 в 17:39:

Дядя Миша, так я же не утверждаю, что нельзя реализовать более-менее реальную физику. Я просто описал некоторые ограничения Flash-а (по крайней мере MX), которые не позволяют создать, как бы это сказать..., много точной физики. Или много, но простенькой, или мало, но относительно точной (почему относительно, написал в ограничениях). Как демонстрация (тот же ragdoll) - нормально, но если вставить уже не один, а два-три, а то и десяток ragdoll-ов, то комп, скорее всего, перестанет нормально переваривать физику. Пример: в архиве есть ролик с веревкой. Хотя веревка моделируется несчатными 50 пружинами, секунд за 40 ролик способен повесить мой комп (почему не сразу - не знаю). Пробывал увеличивать кол-во пружинок в 10 раз - с секунды третьей уже смотрим слайд-шоу...


Отправлено Дядя Миша 17-03-2009 в 18:16:

Цитата:
нормально, но если вставить уже не один, а два-три, а то и десяток ragdoll-ов, то комп, скорее всего, перестанет нормально переваривать физику

Вот и неправда твоя
Qif_Qgame игрушку выкладывал (сцылку давал) - игрушка на флэше, надо стрелять рэгдолльными человечками из пушки.
10-15 таких человечков абсолютно не тормозят. Не забываем, что речь идет про 2Д физику.
А архива твоего что-то невидно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено BioHazard 17-03-2009 в 19:34:

Цитата:
George писал:
Собственно архив:

Вложение: phys.rar (89.5 кб)
Этот файл был скачан 4 раз.


Отправлено Дядя Миша 17-03-2009 в 20:10:

BioHazard ага, что-то не обратил внимания.
George поглядел я твои демки. Тебе знакомо слово "интерполяция" ?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено SanYa 17-03-2009 в 20:37:

Во первых, Дядя Миша, George спасибо за советы!

Цитата:
George писал:
В качестве ресурса, где можно найти много интересных вещей, посоветовал бы flasher.ru

Там я уже давно ошиваюсь .

Цитата:
George писал:
Пример: в архиве есть ролик с веревкой. Хотя веревка моделируется несчатными 50 пружинами, секунд за 40 ролик способен повесить мой комп (почему не сразу - не знаю).

Минут 5 я смотрел и дергал эту веревочку, не повисло и более того, потребление ресурсов не увеличилось.
Не сразу, потому что наверное там что-то где-то накапливается, этого чего-то становится много и машина не выдерживает. Конечно на первый взгляд самое логичное предположение - обновить плеер, так как у меня все ок, а у тебя нет, а вообще, если не трудно, приведи код веревочки, очень интересно, как оно выглядит.

Цитата:
Дядя Миша писал:
Qif_Qgame игрушку выкладывал (сцылку давал) - игрушка на флэше, надо стрелять рэгдолльными человечками из пушки.
10-15 таких человечков абсолютно не тормозят.

А дело в том, что оно скорее всего написано на AS3, который и сам много быстрее и математика там быстрей считается. Если бы дело было на 2й версии скрипта, то вероятно подтормаживало бы.

Цитата:
George писал:
3. Ограничение на время выполнение скрипта (15 секунд на кадр) - но это скорее всего для расчетов, но не для демонстраций.

Имеется ввиду, что обработчик события onEnterFrame у нас максимум будет 15 сек выполняться, а потом заглохнет?
Просто несколько книжек по AS 2 я все-таки осилил и нигде не встречал этой информации . Конечно есть предположение, что в 8й версии флеша, помимо прихода класса bitmap некоторые ограничения ушли, но я в этом не уверен, потому что по сути это же тот же AS2, еще не AS3.

__________________
кто к нам с чем зачем, тот от того и того...


Отправлено Дядя Миша 17-03-2009 в 22:13:

SanYa ну так заюзай AS 3.0
Делов-то

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено SanYa 17-03-2009 в 22:34:

Дядя Миша Это не так просто, там очень много, что изменилось, а я учился изначально на AS2, мне трудно будет переходить, тем более что 3.0 стал полностью объектно-ориентированным, там только классы..классы..классы и ничего кроме. Понятное дело, что придется перейти на него, но сейчас не так много времени, что бы разбираться.
Так что будем мучать AS 2.0

__________________
кто к нам с чем зачем, тот от того и того...


Отправлено George 18-03-2009 в 15:58:

Цитата:
Дядя Миша писал:
Тебе знакомо слово "интерполяция" ?

Теперь знакомо... Только можно объяснить к чему это тут?
Цитата:
SanYa писал:
Имеется ввиду, что обработчик события onEnterFrame у нас максимум будет 15 сек выполняться, а потом заглохнет?

Имеется в виду, что если скрип не успевает выполнится за 15 секунд (а любой скрипт выполняется в течение только одного кадра), то Flash Player выругается (см. вложение) и предложит прервать выполнение скрипта, если отказаться от предложения, то через еще 15 векунд выскочит опять и т.д. Обойти можно, если разбить выполнение скрипта на несколько кадров, чтобы выполнение одного занимало меньше 15 секунд (как сделано в демонстрации с полем диполя).


Отправлено SanYa 18-03-2009 в 16:50:

George Все, теперь понял о чем ты. У меня такое бывало, только когда ошибку допускал в скрипте и он зацикливался.

Кстати, надысь немного порыскал, нашел довольно симпатичную физику на AS 2, http://www.cove.org/flade/

__________________
кто к нам с чем зачем, тот от того и того...


Отправлено Дядя Миша 18-03-2009 в 21:42:

Цитата:
Теперь знакомо... Только можно объяснить к чему это тут?

К тому что физика пускается с определенным интервалом - обычно в 60 fps, а промежуточные значения получаем путем интерполяции соседних результатов. И в итоге маятник их первой демки не будет себя так дерганно вести, да и остальная физика станет помягче.
Ну и конечно же меньший нагруз на CPU.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 07:31.
Показать все 14 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024