Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.08.2005, 17:30
F_Flash вне форума Посмотреть профиль Отправить личное сообщение для F_Flash Найти все сообщения от F_Flash
  № 91  
Ответить с цитированием
F_Flash
 
Аватар для F_Flash

Регистрация: Feb 2002
Сообщений: 358
Отправить сообщение для F_Flash с помощью ICQ
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 работает выстрее.

Старый 12.08.2005, 17:32
KidsKilla вне форума Посмотреть профиль Отправить личное сообщение для KidsKilla Посетить домашнюю страницу KidsKilla Найти все сообщения от KidsKilla
  № 92  
Ответить с цитированием
KidsKilla
.grin! wuz here
 
Аватар для KidsKilla

Регистрация: Aug 2004
Адрес: paradise city
Сообщений: 3,981
Отправить сообщение для KidsKilla с помощью ICQ
F_Flash,
ты эту мутотень написал от незнания, что есть:
mc.hitTest(_xmouse, _ymouse, true) ?

мя прост твой п.1 покарёжил.
я и читать дальше не стал

про 2 варианта ничего странного.
лишнее время на присвоение переменной.
+ одна особенность компилятора.
если условие взято в скобки и все переменные просчитаны, то компилятор будет условие в скобках принимать за "1 переменную", не просчитывать каждый раз.
__________________
Breakcore them all!


Последний раз редактировалось KidsKilla; 12.08.2005 в 17:36.
Старый 12.08.2005, 17:40
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 93  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Интересный пример.
Вариант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 работает выстрее.
на основании чего ты сделал такой вывод?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 12.08.2005, 17:41
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 94  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от KidsKilla
про 2 варианта ничего странного.
лишнее время на присвоение переменной.
+ одна особенность компилятора.
если условие взято в скобки и все переменные просчитаны, то компилятор будет условие в скобках принимать за "1 переменную", не просчитывать каждый раз.
не заметил разницы
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 12.08.2005, 17:54
KidsKilla вне форума Посмотреть профиль Отправить личное сообщение для KidsKilla Посетить домашнюю страницу KidsKilla Найти все сообщения от KidsKilla
  № 95  
Ответить с цитированием
KidsKilla
.grin! wuz here
 
Аватар для KidsKilla

Регистрация: Aug 2004
Адрес: paradise city
Сообщений: 3,981
Отправить сообщение для KidsKilla с помощью ICQ
Цитата:
Сообщение от iNils
не заметил разницы
вот тут:
dx=x2-x1;
dy=y2-y1;
__________________
Breakcore them all!

Старый 12.08.2005, 17:55
F_Flash вне форума Посмотреть профиль Отправить личное сообщение для F_Flash Найти все сообщения от F_Flash
  № 96  
Ответить с цитированием
F_Flash
 
Аватар для F_Flash

Регистрация: Feb 2002
Сообщений: 358
Отправить сообщение для F_Flash с помощью ICQ
Цитата:
Сообщение от KidsKilla
F_Flash,
ты эту мутотень написал от незнания, что есть:
mc.hitTest(_xmouse, _ymouse, true) ?

мя прост твой п.1 покарёжил.
я и читать дальше не стал

про 2 варианта ничего странного.
лишнее время на присвоение переменной.
+ одна особенность компилятора.
если условие взято в скобки и все переменные просчитаны, то компилятор будет условие в скобках принимать за "1 переменную", не просчитывать каждый раз.
Грамотей однако

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 операции вычитания.

Старый 12.08.2005, 17:57
F_Flash вне форума Посмотреть профиль Отправить личное сообщение для F_Flash Найти все сообщения от F_Flash
  № 97  
Ответить с цитированием
F_Flash
 
Аватар для F_Flash

Регистрация: Feb 2002
Сообщений: 358
Отправить сообщение для F_Flash с помощью ICQ
2KidsKilla

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

Старый 12.08.2005, 17:57
E-mail вне форума Посмотреть профиль Отправить личное сообщение для E-mail Найти все сообщения от E-mail
  № 98  
Ответить с цитированием
E-mail
 
Аватар для E-mail

Регистрация: Jun 2005
Адрес: Питер
Сообщений: 498
Записей в блоге: 1
Цитата:
Интересный пример.
Вариант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 работает выстрее.
Во втором варианте на целых две переменных меньше,если они не нужны лучше их не вводить и считать всё вместе.

Старый 12.08.2005, 17:58
KidsKilla вне форума Посмотреть профиль Отправить личное сообщение для KidsKilla Посетить домашнюю страницу KidsKilla Найти все сообщения от KidsKilla
  № 99  
Ответить с цитированием
KidsKilla
.grin! wuz here
 
Аватар для KidsKilla

Регистрация: Aug 2004
Адрес: paradise city
Сообщений: 3,981
Отправить сообщение для KidsKilla с помощью ICQ
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.
Старый 12.08.2005, 18:02
KidsKilla вне форума Посмотреть профиль Отправить личное сообщение для KidsKilla Посетить домашнюю страницу KidsKilla Найти все сообщения от KidsKilla
  № 100  
Ответить с цитированием
KidsKilla
.grin! wuz here
 
Аватар для KidsKilla

Регистрация: Aug 2004
Адрес: paradise city
Сообщений: 3,981
Отправить сообщение для KidsKilla с помощью ICQ
Цитата:
Сообщение от E-mail
Во втором варианте на целых две переменных меньше,если они не нужны лучше их не вводить и считать всё вместе.
переменные нужны, когда однотипных вычислений море. но их иожно как раз просто в скобки поместить, будет тот же эффект.

но я дополнительные переменные использую примерно так:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:55.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.