![]() |
|
||||||||||
|
|||||
|
1.Хит тест для объектов не прокатывает т.к. он смотрит не по форме объекта а по боудинбоксу объектов. т.е. по прямоугольным рамкам грубо говоря которые описаны вокруг объектов.
2. ЧТоб решить эту проблему есть только один способ создавать для каждого объекта набор вершин замыкание которых обарзуют форму объекта. И столкновение проверять если хотябы одна из вершин оджного объекта принадлежит отбласти дркгого объекта то столкновение произошло. ОЧень верно было замечено что если набор вершин составляет выпуклую форму то это сильно упрощает расчет. Кроме того в HAVOK точно так же используется понятие боудинбокса, и просчет столкновения (коллижна) может проходить по нескольким параметрам - ПО прямоугольнику - ПО сетке натянутой на обхект , чтоб добиться выпуклой ыормы. т.е. игнорируются все впуклости. - ПО непосредсвенно самой сетке. - ПО спесиально созданному дополнительному объекту. Кстати просчитать коллижн для объекта круглой формы это самый быстрый метод. Для того чтобя из рисунка нарисовнного получить програмно набор точек, можно хиттестом создесть массив точек которые пиняджлежат объекту(т.к. getPixel до 8-й версии функция еще отсутсвует), т.е. создат бинарную карту с экрана, найти у этой карты описывающие точки и проаксимировать край. ПАрамер апроксимации можно создать разный, так же например для созданиф создение выпуклой описывающей формы. 3. ЧТоб объект не заскивал на другой объект, нужно при столкновении искать точку соприкосновения до столкновения, вычисляя дистанцию для обоих объектов по их пути до то чтоки соприкосновения. И в этом же кадре дать координату отхода. 4. ЧТоб объекты не проскаивали друг через друга на большой скорости. - проверять пересекались ли их отрезки пути сзахватом на размер объхекта, здесь можно использовать окружность в качестве боудинг бокса. А вообще самый правильный путь реализации движка физики для флеша. Это использования примитивов описанных вокруг формы объекта. - Окружность. - Прямоугольник - Многоугольник. Но если например будет 10 многоугольников скажем по 10 вершин в каждом то это будет ж...а. т.к. флеш такая штука тормозная... Где на создании например переменной уходит куча времени. т.е. теаритически Full Phizic Enfine реализовать можно, но практически нет из за того что он интерпретируемый. Машин таких не придумали еще. Интересный пример. Вариант1 x1=random(1000); y1=random(1000); x2=random(1000); y2=random(1000); dx=x2-x1; dy=y2-y1; dist=Math.sqrt(dx*dx+dy*dy); Вариант2 x1=random(1000); y1=random(1000); x2=random(1000); y2=random(1000); dist=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); ка не странно, вариант 2 работает выстрее. |
![]() |
Часовой пояс GMT +4, время: 12:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|