![]() |
|
||||||||||
|
|||||
|
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 работает выстрее. |
|
|||||
|
.grin! wuz here
|
F_Flash,
ты эту мутотень написал от незнания, что есть: mc.hitTest(_xmouse, _ymouse, true) ? мя прост твой п.1 покарёжил. я и читать дальше не стал про 2 варианта ничего странного. лишнее время на присвоение переменной. + одна особенность компилятора. если условие взято в скобки и все переменные просчитаны, то компилятор будет условие в скобках принимать за "1 переменную", не просчитывать каждый раз.
__________________
Breakcore them all! Последний раз редактировалось KidsKilla; 12.08.2005 в 17:36. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
|
|
|||||
|
.grin! wuz here
|
Цитата:
dx=x2-x1; dy=y2-y1;
__________________
Breakcore them all! |
|
|||||
|
Цитата:
![]() 1.mc.hitTest(_xmouse, _ymouse, true) это для точки и объека а не для двух объектов. 2. Не компилятора а итерпритатора. 3. И он так не считает а считает тупо и не анализирует что написано в скобках. Пример. Вариант 1 s=getTimer(); x1=50000; x2=10000; y1=50000; y2=10000; for(i=1;i<=100000;i++){ dist=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); } trace(getTimer()-s); Вариант 2 s=getTimer(); x1=50000; x2=10000; y1=50000; y2=10000; for(i=1;i<=100000;i++){ dist=Math.sqrt((x2-x1)*(x2-x1)+(x2-x1)*(x2-x1)); } trace(getTimer()-s); На эти варианты уходит одинаковое количество вермени хотя если по твоему методу то во втором сучае должна быть явная экономия на 1 операции вычитания. |
|
|||||
|
2KidsKilla
И еще прочитай внимательно, хиттест для точки и объхекта исполтьзуется в моем предложенном вариенте для получения описываемиого шейпа. |
|
|||||
|
Цитата:
|
|
|||||
|
.grin! wuz here
|
1) понял.
2) ты чего бредишь? я те про переменные dx и dy говорил. а ты написал 2 АБСОЛЮТНО ОДИНАКОВЫХ кода и удивляешься, что время одинаковое. я имел в виду: function(){ var x = Math.PI+2; return x } работает дольше чем function(){ var x = (Math.PI+2); return x }
__________________
Breakcore them all! Последний раз редактировалось KidsKilla; 12.08.2005 в 18:06. |
|
|||||
|
.grin! wuz here
|
Цитата:
но я дополнительные переменные использую примерно так: var tmp = long.long.way.to.my.object.for["example"].xml for(var i in tmp) trace(tmp[i])
__________________
Breakcore them all! |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|