Давненько уже пишу на ActionScript 2.0, недавно задался идеей реализовать физику для объектов сцены, но понимаю в этом не слишком много, хотелось бы у вас спросить, каков вообще принцип написания физики (для 2д объектов), представляю себе это так: нужно описать несколько классов стандартных объектов (круг, квадрат, треугольник), в классе должен присутствовать вектор скорости и различные силы действующие на объект, которые будут каждый кадр просчитываться и изменять вектор скорости, так же нужно просчитывать углы поворотов объектов и самое главное - столкновения.
По сути прошу описать схему, по которой будут происходить рассчеты и изменения каждый кадр.
Если знаете ресурсы, где описывается это дело, буду очень признателен ссылочке (было бы хорошо, если ресурс на русском, но и английскому тоже буду рад).
зы: о существовании готовых движков знаю, но не хочу их по 2м причинам: они на AS3 и хочется разобраться самому.
В общем, за любую информацию буду благодарен.
__________________
кто к нам с чем зачем, тот от того и того...
Гугли 2D physic. Собственно физика состоит из двух частей - симулятора и коллижен детектора. Для 2D написать коллижен детектор достаточно просто. Физика - обычные уравнения из школьного курса.
Силы, действующие на тело.
Начну сразу с плохого: во Flash (по крайней мере MX) крайне тяжело, а порой невозможно (однако не буду полностью отрицать) создать полноценную, честную, нетормознутую физику. И почему же?
1. Относительное небыстродействие Flash-а.
2. Ограничение на разрядность чисел (насколько помню - 17 разрядов, причем 4 из них занимает E+65 (К примеру)).
3. Ограничение на время выполнение скрипта (15 секунд на кадр) - но это скорее всего для расчетов, но не для демонстраций.
4. До тех пор, пока скрип не выполнится, кадр не сменится. Т.е. даже если стоит 120 кадр/сек, то реально может быть намного меньше, или, еще понятнее, значение кадр/сек - это верхнее ограничение для скорости воспроизведения.
Но! Если цель - получение опыта, а именно необходимых алгоритмов реализации физики, то Flash почти идеально (если не замахиваться на большое) подходит для этого, т.к. можно быстро увидеть результаты своей работы.
В качестве ресурса, где можно найти много интересных вещей, посоветовал бы flasher.ru
Ну и напоследок, архивчик с разными физическими (+1 математика) демонстрациями, с которыми я когда-то баловался. К каждой демонстрации приложен текстовый файл с некоторыми комментариями. Собственно архив:
Вложение: phys.rar (89.5 кб)
Этот файл был скачан 409 раз.
Дядя Миша, так я же не утверждаю, что нельзя реализовать более-менее реальную физику. Я просто описал некоторые ограничения Flash-а (по крайней мере MX), которые не позволяют создать, как бы это сказать..., много точной физики. Или много, но простенькой, или мало, но относительно точной (почему относительно, написал в ограничениях). Как демонстрация (тот же ragdoll) - нормально, но если вставить уже не один, а два-три, а то и десяток ragdoll-ов, то комп, скорее всего, перестанет нормально переваривать физику. Пример: в архиве есть ролик с веревкой. Хотя веревка моделируется несчатными 50 пружинами, секунд за 40 ролик способен повесить мой комп (почему не сразу - не знаю). Пробывал увеличивать кол-во пружинок в 10 раз - с секунды третьей уже смотрим слайд-шоу...
нормально, но если вставить уже не один, а два-три, а то и десяток ragdoll-ов, то комп, скорее всего, перестанет нормально переваривать физику
Вот и неправда твоя
Qif_Qgame игрушку выкладывал (сцылку давал) - игрушка на флэше, надо стрелять рэгдолльными человечками из пушки.
10-15 таких человечков абсолютно не тормозят. Не забываем, что речь идет про 2Д физику.
А архива твоего что-то невидно.
George писал: В качестве ресурса, где можно найти много интересных вещей, посоветовал бы flasher.ru
Там я уже давно ошиваюсь .
Цитата:
George писал: Пример: в архиве есть ролик с веревкой. Хотя веревка моделируется несчатными 50 пружинами, секунд за 40 ролик способен повесить мой комп (почему не сразу - не знаю).
Минут 5 я смотрел и дергал эту веревочку, не повисло и более того, потребление ресурсов не увеличилось.
Не сразу, потому что наверное там что-то где-то накапливается, этого чего-то становится много и машина не выдерживает. Конечно на первый взгляд самое логичное предположение - обновить плеер, так как у меня все ок, а у тебя нет, а вообще, если не трудно, приведи код веревочки, очень интересно, как оно выглядит.
Цитата:
Дядя Миша писал: Qif_Qgame игрушку выкладывал (сцылку давал) - игрушка на флэше, надо стрелять рэгдолльными человечками из пушки.
10-15 таких человечков абсолютно не тормозят.
А дело в том, что оно скорее всего написано на AS3, который и сам много быстрее и математика там быстрей считается. Если бы дело было на 2й версии скрипта, то вероятно подтормаживало бы.
Цитата:
George писал: 3. Ограничение на время выполнение скрипта (15 секунд на кадр) - но это скорее всего для расчетов, но не для демонстраций.
Имеется ввиду, что обработчик события onEnterFrame у нас максимум будет 15 сек выполняться, а потом заглохнет?
Просто несколько книжек по AS 2 я все-таки осилил и нигде не встречал этой информации . Конечно есть предположение, что в 8й версии флеша, помимо прихода класса bitmap некоторые ограничения ушли, но я в этом не уверен, потому что по сути это же тот же AS2, еще не AS3.
__________________
кто к нам с чем зачем, тот от того и того...
Дядя Миша Это не так просто, там очень много, что изменилось, а я учился изначально на AS2, мне трудно будет переходить, тем более что 3.0 стал полностью объектно-ориентированным, там только классы..классы..классы и ничего кроме. Понятное дело, что придется перейти на него, но сейчас не так много времени, что бы разбираться.
Так что будем мучать AS 2.0
__________________
кто к нам с чем зачем, тот от того и того...
Дядя Миша писал: Тебе знакомо слово "интерполяция" ?
Теперь знакомо... Только можно объяснить к чему это тут?
Цитата:
SanYa писал: Имеется ввиду, что обработчик события onEnterFrame у нас максимум будет 15 сек выполняться, а потом заглохнет?
Имеется в виду, что если скрип не успевает выполнится за 15 секунд (а любой скрипт выполняется в течение только одного кадра), то Flash Player выругается (см. вложение) и предложит прервать выполнение скрипта, если отказаться от предложения, то через еще 15 векунд выскочит опять и т.д. Обойти можно, если разбить выполнение скрипта на несколько кадров, чтобы выполнение одного занимало меньше 15 секунд (как сделано в демонстрации с полем диполя).
Теперь знакомо... Только можно объяснить к чему это тут?
К тому что физика пускается с определенным интервалом - обычно в 60 fps, а промежуточные значения получаем путем интерполяции соседних результатов. И в итоге маятник их первой демки не будет себя так дерганно вести, да и остальная физика станет помягче.
Ну и конечно же меньший нагруз на CPU.