PDA

Просмотр полной версии : Ошибается hitTest.... помогите


asvserg
06.10.2003, 13:30
есть мувик, при нажатии мышки я делаю:

dr = this.duplicateMovieClip("dr",++drag_depth,this);
dr.parent = this;

затем таскаю копию.... когда отпускаю - копия возвращается на начальное место:

function obj_MouseUp() {
...........
angle_rad=Math.atan2(((dr._y+dr._height/2) - (dr.parent._y+dr._height/2)),
((dr._x+dr._width /2) - (dr.parent._x+dr._width /2)));
dy=Math.sin(angle_rad);
dx=Math.cos(angle_rad);
........
} // func

_root.onEnterFrame = function () {
if (!return_obj) {
return;
} //if
for(i=1;i<=12;i++) {
dr._x -= dx*2;
dr._y -= dy*2;
var y = dr._y+dr._height/2;
var x = dr._x+dr._width /2;
if (dr.parent.hitTest(dr) ||
dr.parent.hitTest(x+20,y,false) ||
dr.parent.hitTest(x-20,y,false) ||
dr.parent.hitTest(x,y+20,false) ||
dr.parent.hitTest(x,y-20,false)) {

dr.removeMovieClip();
return_obj = false;
break;
} // if
} // for
} // func


проблема в том, что порожденный объект проходит через своего родителя и не удаляется... диаметр объекта 16 пикселей, пробовал проверять по нескольким точкам, увеличил дискретизацию перемещения -- все равно периодически проскакиевает :-( при этом визуально порожденный объект точно проходит через родителя !!!!
ошибка не периодична!!!
Помогите... кроме вычисления длины гипотинузы и проверки пройденного пути ничего в голову не приходит....

Пушистик
06.10.2003, 14:13
не понял в чем проблема..... :confused: мувики не удаляются при перетаскивании на родителя?

asvserg
06.10.2003, 14:24
тащем мувик, при этом создается дубликат, а родитель остается на месте.... затем отпускаем и дубликат возвращается к родителю. при пересечении с родителем дубликат удаляется... проблема в том, что момент пересечения иногда не отлавливется и дубликат летит в бесконечность.... хотя визуально он пересекается с родителем.....

sergwizard
08.10.2003, 01:32
Полчаса таскал твои кружочки, - все работает нормально, никаких сбоев.
Единственное замечание: ты излишне усложняешь код.
К примеру, последнюю часть кода я бы написал так:
_root.onEnterFrame = function () {
for(i=1;i<=12;i++) {
if(return_obj){
dr._x -= dx*2;
dr._y -= dy*2;
if (dr.parent.hitTest(dr)) {
dr.parent.onPress = obj_Press;
dr.parent.useHandCursor = true;
dr.parent._alpha = 100;
dr.removeMovieClip();
return_obj = false;
}
}
}
}

asvserg
08.10.2003, 12:24
дык в том-то и дело, что ошибка возникает очень редко, особенно когда показываешь заказчику :D ... кроме этого, случаются проблемы с определением угла до родителя, в этом случае родитель и предок не пересекаются вообще (визуально)... решил все с помощью определения длины пройденного пути до родителя...работает 100%, пока глюков не было.... кому интересно - вот:

function obj_MouseUp() {

var angle_rad=Math.atan2(((dr._y+dr._height/2) - (dr.parent._y+dr._height/2)),
((dr._x+dr._width /2) - (dr.parent._x+dr._width /2)));
dy=Math.sin(angle_rad);
dx=Math.cos(angle_rad);
st_x = dr._x;
st_y = dr._y;
var y = (dr._y - dr.parent._y);
var x = (dr._x - dr.parent._x);
st_g = Math.sqrt(y*y + x*x);
return_obj = true;
} // func


_root.onEnterFrame = function () {
if (!return_obj) {
return;
} //if

dr._x -= dx*24;
dr._y -= dy*24;

var y = (dr._y - st_y);
var x = (dr._x - st_x);
var g = Math.sqrt(y*y + x*x);
if (dr.parent.hitTest(dr) ||
g >= st_g) {
dr.parent.onPress = obj_Press;
dr.parent.useHandCursor = true;
dr.parent._alpha = 100;
dr.removeMovieClip();
return_obj = false;
} // if
} // func