PDA

Просмотр полной версии : Проверка коллизии из клипа.


Gh >k
16.07.2007, 19:52
У меня не получается проверить колллизию ролика 2 уровня(в ролике) и ролика 1 уровня(на временной шкале).Создал функцию которая проверяет пересечения с поточечным сканированием.
var arrCords:Array = new Array();
function hit(clip1:MovieClip, clip2:MovieClip) {
arrCords = [];
var checkingClip:MovieClip;
var secondClip:MovieClip;
if (clip1._width*clip1._height>=clip2._width*clip2._height) {
checkingClip = clip2;
secondClip = clip1;
} else {
checkingClip = clip1;
secondClip = clip2;
}
for (var i = checkingClip._x-checkingClip._width/2; i<=checkingClip._x+checkingClip._width/2; i++) {
for (var j = checkingClip._y-checkingClip._height/2; j<=checkingClip._y+checkingClip._height/2; j++) {
if (checkingClip.hitTest(i, j, true) && secondClip.hitTest(i, j, true)) {
arrCords.push({x:i, y:j});
}
}
}
if (arrCords.length == 0) {
return false;
} else {
return true;
}
}
Она видит пересечение 2 клипов 1 уровня.
А когда я ставлю такой код
trace (hit(mc1.mc3,mc2));
где mc1-клип в котором находится mc3,а mc2-второй клип, он выводит "false" даже когда они пересекаются, если была ошибка в коде, или нельзя бало их не сканировал он выдал бы "unedinfited".значит проблема в другом.
Подскажите пожалуйста если кто сталкивался.

CorC
17.07.2007, 10:30
А на что hitTest?

Gh >k
17.07.2007, 22:28
hitTest на mc2.

BigDan
17.07.2007, 22:34
hitTest принимает глобальные координаты

Gh >k
18.07.2007, 01:11
Я тоже так думал, но факт то что неработает, я пробывал.
Попробуйте и сами весь код я дал.

CorC
18.07.2007, 10:32
Вы хотите сказать что хиттест работает только на родителей и не работает на внутренние? Неправда, я это часто юзаю.

Gh >k
18.07.2007, 18:54
Я имел ввиду мой хиттест - функция hit/

BigDan
18.07.2007, 19:42
Я имел ввиду мой хиттест - функция hit/
В этой функции i и j преобразовывай в глобальные координаты(localToGlobal).

Gh >k
19.07.2007, 07:16
Можно пожалуйста точно изменённый код, чо-то неполучается. И ещё, остальные переменные тоже надо в глобальные ?