Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Ошибается hitTest.... помогите (http://www.flasher.ru/forum/showthread.php?t=49961)

asvserg 06.10.2003 13:30

Ошибается hitTest.... помогите
 
есть мувик, при нажатии мышки я делаю:
Код:

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

Вложений: 1
тащем мувик, при этом создается дубликат, а родитель остается на месте.... затем отпускаем и дубликат возвращается к родителю. при пересечении с родителем дубликат удаляется... проблема в том, что момент пересечения иногда не отлавливется и дубликат летит в бесконечность.... хотя визуально он пересекается с родителем.....

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



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

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