forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Модули для BlitzMax (http://forum.boolean.name/forumdisplay.php?f=105)
-   -   Быстрая коллизия (http://forum.boolean.name/showthread.php?t=14415)

Черный крыс 13.03.2011 20:45

Быстрая коллизия
 
Вложений: 1
Привет!

Стандартные БМ коллизии меня по многим причинам не устраивали, он жрет много памяти, работает очень медленно и.т.д...
Представляю Вам свое творение - модуль проверки столкновений. Он ничего внутри себя не хранит ( кроме одной переменной ), и работает заметно шустрее, имеет 2 вида проверок - отложеное и непосредственное, в отложенном методе возвращает только один обьект с которым столкнулся в последний раз, можно, конечно сделать что бы он возвращал массив, но передо мной такой задачи не стояло, все с открытыми исходниками, поэтому кому нужен массив, тот переделает.

Но есть одно ограничение : проверка возможна только точка->картинка.

Модуль полностью задокументирован, поэтому сложностей вызвать не должен.
Также имеется два примера, один из примеров крэш-тест, сравнивающий разницу в производительности со стандартным коллизионным движком, что называется "почуствуйте разницу".

ЗЫ Все последующие обновления движка я буду выкладывать на адрес, указанный в подписе.

SBJoker 13.03.2011 21:11

Ответ: Быстрая коллизия
 
Почему то у меня подозрение что ты не умеешь использовать коллизии макса правильно. Ты по-видимому сталкиваешь картинки друг с другом по одной?

Черный крыс 13.03.2011 21:20

Ответ: Быстрая коллизия
 
Цитата:

Сообщение от SBJoker (Сообщение 182681)
Почему то у меня подозрение что ты не умеешь использовать коллизии макса правильно. Ты по-видимому сталкиваешь картинки друг с другом по одной?

Сначала я их пишу в слой writemask, после этого вытаскиваю массив вызвав функцию CollideRect с параметром collidemask.

ты это имеешь виду? если я не прав, прошу Вас меня просветить...

SBJoker 13.03.2011 21:42

Ответ: Быстрая коллизия
 
Ну почти так.
Сначала с помощью CollideImage картинки заносят со своим скейлом и положением в слой соответствующих требуемой группе однотипных объектов.
После чего с помощью этой же функции но в режиме чтения производится сталкивание с требуемым изображением. В результате чего получаем список всех столкнувшихся объектов.

Прошу заметить что производится попиксельное столкновение с учетом всех параметров. Если у тебя такое же по качеству и скорости решение то это круто.

Черный крыс 13.03.2011 22:38

Ответ: Быстрая коллизия
 
Цитата:

Сообщение от SBJoker (Сообщение 182686)
Прошу заметить что производится попиксельное столкновение с учетом всех параметров. Если у тебя такое же по качеству и скорости решение то это круто.

Значит я крут! :cool:

Черный крыс 14.03.2011 01:47

Ответ: Быстрая коллизия
 
Цитата:

Сообщение от SBJoker (Сообщение 182686)
Сначала с помощью CollideImage картинки заносят со своим скейлом и положением в слой соответствующих требуемой группе однотипных объектов.
После чего с помощью этой же функции но в режиме чтения производится сталкивание с требуемым изображением. В результате чего получаем список всех столкнувшихся объектов.

Я эти "официальные" коллизии как то давно изучал. Там ужаснутся можно КАК эти коллизии сделаны. - Создается софтварный буфер в который заносится инфа о картинке при записи, потом из него же читается, и все это на проце - способ жутко медленный. У меня была в одно время идея заменить этот буффер, на стенсильный или же на D\W буффер видеокарты, тогда прирост производительности был бы ощутимо многократным, но как то не сложилось.

Думаю всем известно, что Max2D - модуль очень мудацкий.

Мой модуль коллизии можно ускорить еще на порядок быстрее, но в таком случае пришлось бы изменять официальные мудо-модули, что привело бы к потере совместимости со стандартным БМаксом, этого мне не хотелось. Вот и пришлось плясать с бубном на перевес сочиняя свой колизионный движок, и при этом ограничивая себя той писаниной "супер-проггера" по имени Марк Сибли. =)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot