Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Physical engine (http://www.flasher.ru/forum/showthread.php?t=66685)

F_Flash 12.08.2005 18:34

Цитата:

Сообщение от iNils
если пройтись дебагером то разница в коде будет такая:


13 _push "dist"/*Dic[4]*/, "x2"/*Dic[2]*/
14 _getVariable
15 _push "x1"/*Dic[0]*/
16 _getVariable
17 _subtract
18 _push "x2"/*Dic[2]*/
19 _getVariable
20 _push "x1"/*Dic[0]*/
21 _getVariable
22 _subtract
23 _multiply
24 _push "y2"/*Dic[3]*/
25 _getVariable
26 _push "y1"/*Dic[1]*/
27 _getVariable
28 _subtract
29 _push "y2"/*Dic[3]*/
30 _getVariable
31 _push "y1"/*Dic[1]*/
32 _getVariable
33 _subtract

как видите хотя операции разные, их количество одинаково



2KidsKilla вот прекрасный пример показывает то что одинаковые скобки флеш не ищет а считает все тупо и последовательно не анализируя выражение.

2iNils да, на создание переменной больше вренеи тратится чем на substract

F_Flash 12.08.2005 18:37

Цитата:

Сообщение от iNils
перед тем как спросить с чего вы взяли я это и сделал. результат был такой: через раз, когда первый быстрее когда второй.

и кстати, не корректно первую функцию 10000 запускать, а вторую 80000 :)

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

iNils 12.08.2005 18:44

разница в 35-40 мс на 10000 подсчетов, ну не знаю за уши как притянуто

F_Flash 12.08.2005 18:52

Цитата:

Сообщение от iNils
разница в 35-40 мс на 10000 подсчетов, ну не знаю за уши как притянуто

Ну ты можешь просто не меняя код позапускать у тебя разница будет такая же. Это погрешность просто. Нелтьза создать иделаьные условия.

В первом примере разница 10% аво втором 1% и то не понятно в какую сторону.

руль 12.08.2005 23:01

Цитата:

Сообщение от F_Flash
1.Хит тест для объектов не прокатывает т.к. он смотрит не по форме объекта а по боудинбоксу объектов. т.е. по прямоугольным рамкам грубо говоря которые описаны вокруг объектов.
2. ЧТоб решить эту проблему есть только один способ создавать для каждого объекта набор вершин замыкание которых обарзуют форму объекта. И столкновение проверять если хотябы одна из вершин оджного объекта принадлежит отбласти дркгого объекта то столкновение произошло.

вот-вот...я это и пытался вдолбить - что если задавать обьект в виде массива вершин - этого будет вполне достаточно. А столкновение считать либо по хиттесту либо попытаться написать свою функцию, но не факт что получится быстрее.

Цитата:

Сообщение от F_Flash
А вообще самый правильный путь реализации движка физики для флеша.
Это использования примитивов описанных вокруг формы объекта.
- Окружность.
- Прямоугольник
- Многоугольник.

первые два - частные случаи последнего

Takato 12.08.2005 23:14

Цитата:

Сообщение от руль
первые два - частные случаи последнего

окружность - не многоугольник. ее ваще задать можно центром и радиусом - и расчет на соприкосновение с ней делать, как уже сказали, гораздо легче

Ion 13.08.2005 03:18

окружность - это по сути правильный многоугольник с бесконечно большим количеством бесконечно малых сторон

Ion 13.08.2005 03:30

Цитата:

Сообщение от F_Flash
Верно, о чем и речь, что на создение переменной уходит очень много времени во флеше. Это один из явных примеров о медленности скрипта флеша .

да, тут они не рассчитали. Надо было им сделать как javascript: хранится программа в виде скрипта, а перед выполнениемвсё компилится в машинно-зависимый код, что доводит скорость выполнения почти до С(++). Я тут игру 1-у пишу с немеренным количеством графики и заметил вот что: в самом начале все дико тормозит, но когда каждый каждый клип по всем фреймам пройдется и все переменные задействуются, всё идет намного быстрее. Это наводит на мысль, что память для каждого объекта выделятся не при его формальном создании, а непосредственно перед использованием. Видимо, макромедийцы таким образом решили "размазать" загрузку по всей флешке тонким слоем, чтобы не было заметно, но не рассчитали, что если посреди воспроизведения потребуется выделить немеренный блок памяти то добром это не кончится. Отсюда новый вывод: чтобы снизить тормоза до минимума надо все объекты до реального использования заюзать формально:

var a:Number = 123;
a=a+1-1;

my_mc.play();

и т.д..

ЗЫ: прошу простить за флейм, но раз уж затронули эту тему, решил поделиться давнишними мыслями и узнать, что вы думаете по этому поводу.

Takato 13.08.2005 03:34

Цитата:

Сообщение от Ion
окружность - это по сути правильный многоугольник с бесконечно большим количеством бесконечно малых сторон

Который будет бесконечно тормозить во флэше :D

Ion 13.08.2005 03:36

более того - он везде вызовет падение системы при попытке выполнения


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

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