Просмотр полной версии : HitTest
значит есть два объекта s1 и s2 они очень абстрактной формы, так что получается очень много пустого места в своеобразных Bounding Box-ах, т. е. они могут соприкоснуться углами своих "Ящиками" а рисунки не соприкоснутся и команда
if (s1.hitTest (s2)) {
....
}
сработает!! Так вот как сделать проверку пересечения по контуру самого рисунка???? :D
Смольный (Smolniy)
15.01.2003, 03:36
Напрямую - никак. Надо хитрить. Например, обставить один из клипов руками по контуру невидимыми клипами и проверять попадание этих клипов на вторую фигуру.
BlackChuvak
16.01.2003, 17:02
Почему - никак???
Разве вот это не работает? :
Пишем на клипе s1 :
onClipEvent(enterFrame) {
if (*.hitTest(getBounds(_root).xMax, _y, true)) {
xSpeed = -speed;
}
if (*.hitTest(getBounds(_root).xMin, _y, true)) {
xSpeed = speed;
}
if (*.hitTest(_x, getBounds(_root).yMax, true)) {
ySpeed = speed;
}
if (*.hitTest(_x, getBounds(_root).yMin, true)) {
ySpeed = -speed;
}
}
* - Путь до s2.
Max N Chubin_
16.01.2003, 17:58
2 BlackChuvak:
ты сам то пробовал или только догадки сюда шлешь?
всегда свой код вставляй во флэшку и проверяй результат...
идея хорошая, но BlackChuvak что ты имеешь ввиду под переменными xSpeed и speed и что такое getBouds(_root) никогда раньше не втсречал! И ещё одно к сожалению слишком громоздко! Но ниче пригодится!
BlackChuvak
17.01.2003, 17:52
Всё проверено мной и работает! И не один раз проверено! :) :) :)
Max N Chubin_
18.01.2003, 12:12
кинь исходник..
научи!!!
;)
BlackChuvak
20.01.2003, 22:34
Да, кстати, про переменные xSpeed и ySpeed - это не принимать в расчёт! Это я там делал мув, забыл удалить...
А вот и файл...
Да, кстати, зайдите вот сюда (http://www.flasher.ru/forum/showthread.php?s=&threadid=41860), плиз... :) :) :)
iLoveYou
20.01.2003, 22:58
Что-то бред какой-то...
Или ты, Черный Чел, не понял вопроса...
Или я не понял ответа...
Нимогу ни единого файла с флешера скачать, все пытаются загрузиться как attachment.php ничего не понимаю!
Max N Chubin_
21.01.2003, 01:16
2 BlackChuvak:
я думал ты покажешь как все сделать на getbounds()
2 navidim:
скачай файл attachment
переименуй его в attachment.zip и распакуй...
или сразу открывай а не скачивай а када система спросит чем открывать укажи WInZip
мне непонятно куда смотрят админы!!!
уже столько раз ЖАЛОВАЛИСЬ ЛЮДИ!!!!
Модераторы, вы где???
Достучитесь до небес - жуть как неудобно!
:(
BlackChuvak
21.01.2003, 17:08
2 Sergey"iLoveYou" :
Что здесь непонятного? В исходноке можно менять форму клипа на какую захочешь! Если ты думаешь, что этот мув работает только благодаря квадратности прямоугольника, то ты ошибаешься!!!
2 Max N Chubin_ :
Я же расписал в клипе всё... Ну, если не понятно, то - getBounds() - Это такая фишка, которая описывает объект сверху, снизу, справа и слева и во всех выемках, углублениях и т.п., т.е. русским языком, getBounds() дословно это "сделать стены", и если приписать эти "стены" к hitTest'у, то флэш будет проверять сталкивается ли объект не по квадратику, а по контуру(даже невидимому)! Если не понял, свяжись со мной по аське.
llllllllll
21.01.2003, 18:03
Оригинал написал(а) BlackChuvak
Ну, если не понятно, то - getBounds() - Это такая фишка, которая описывает объект сверху, снизу, справа и слева и во всех выемках, углублениях и т.п.,
ты думаешь чего говоришь то? =)
Честно, тоже нихрена не понял. исходник к тому же не работал. Но немного подправил - и по крайней мере отталкивается вверх не от прямоугольного объекта, это точно!
iLoveYou
21.01.2003, 20:05
Ну, способ имеет право на жизнь...
llllllllll
21.01.2003, 20:27
Максимум, чисто для теории =) ,
можно сделать следующее:
box = _mc.getBounds(_root);
for(y = box.yMin ; y < box.yMax ; y++ ){
var str = "";
for( x=box.xMin ; x < box.xMax ; x++ ){
str += Number(_mc.hitTest(x,y,true));
}
trace(str);
}
, ну и такое же соответственно для второго мувика, ну а потом сравнивать две матрицы =), ну и там всякие алгоритмы Сазерленда и т д ....
Мдя ... =)
llllllllll
21.01.2003, 21:49
0000000000011111111111100000000000
0000000011111111111111111100000000
0000000111111111111111111110000000
0000001111111111111111111111100000
0000111111111111111111111111110000
0001111111111111111111111111111000
0011111111111111111111111111111100
0011111000000111111110000001111100
0111111000000111111110000001111110
0111111000000111111110000001111110
0111111000000111111110000001111110
0111111111111111111111111111111110
0111111111111111111111111111111110
0111111111111111111111111111111110
0111111111111111111111111111111110
0011111111111111111111111111111100
0011111100000000000000000001111100
0001111110000000000000000111111000
0000111111100000000000001111110000
0000001111111110000011111111100000
0000000111111111111111111110000000
0000000001111111111111111000000000
0000000000001111111111000000000000
0000000000000000000000000000000000
0000000000000000000000000000000000
Max N Chubin_
21.01.2003, 22:56
нужно будет пофантазировать над алгоритмом обработки столкновений через матрицы..
хотя сдается мне что перебор контрольных точек в цикле через hitTest будет проще и менее ресурсоемко...
llllllllll
22.01.2003, 00:08
Фантазировать тут нефик, вот эта РОЖА =) на моем компе генерилась 1 секунду - это ОЧЕНЬ ДОЛГО =), а чуть больше размеры мува и все флеш повис ... че то там должен сказать про число итераций кажись ... я же говорю "теоретически" =)
BlackChuvak
22.01.2003, 03:43
2 llllllllll
Да, ты просто убрал 3 ненужных в этом клипе getBounds()
А вот если так?
llllllllll
22.01.2003, 12:27
http://www.w-place.com/test/hitXY.gif
ну и чего? =), ... ты не совсем прав, этот вопрос мусолили еще два с половиной года назад =)
llllllllll
22.01.2003, 12:43
Кстати, я ни чего в коде твоем не трогал. всеголишь сменил фигуру =), прикольная игрушка получилась ... "проникни в шарик" %) называется ...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.