FLASH / AS3: рисунок, который следует за курсором, но ограничен неправильной областью - PullRequest
1 голос
/ 03 июня 2010

Как сделать в ActionScript 3 во Flash мувиклип, который следует за курсором, но ограничен неправильной формой другого мувиклипа?

Редактировать: это то, что мне нужно:

stage.addEventListener(MouseEvent.MOUSE_MOVE,follow);
function follow(evt:MouseEvent){
      if(container.hitTestPoint(mouseX, mouseY, true)) {
    cursor.x = mouseX;
    cursor.y = mouseY;
      } else { 
      var dx:int = cursor.mouseX;
      var dy:int = ;
  cursor.x = dx;
  cursor.y = cursor.mouseY;

      }
}

Я хочу сделать так, чтобы курсор MC все еще «следовал» за курсором, когда он находится вне контейнера MC, но не может выйти из него.

Старый скрипт AS2, который это делает, но я не уверен, как его преобразовать:

onClipEvent (mouseMove) {
    tX = _parent._xmouse;
    // tX/tY are 'target' X/Y.
    tY = _parent._ymouse;
    if (_parent.constraintzone.hittest(tX, tY, true)) {
        _x = tX;
        _y = tY;
    } else {
        // and now the hurting begins
        // get XY of center of constraint zone
        cX = _parent.constraintzone._x;
        // cX/cY are 'constrained' X/Y,
        cY = _parent.constraintzone._y;
        // found somewhere inside the constraint zone.
        accuracy = 1;
        // smaller = more accurate.
        do {
            dX = (tX-cX)/2;
            // dX/dY are deltas to the midpoint between
            dY = (tY-cY)/2;
            // target XY and constrained XY.
            if (_parent.constraintzone.hittest((tX-dX), (tY-dY), true)) {
                cX += dX;
                // midpoint is in; step out towards mouse.
                cY += dY;
            } else {
                tX -= dX;
                // midpoint is out; step in towards center.
                tY -= dY;
            }
            // loop end.
            // (dD > .5) is more accurate, (dX > 10) is less.
        } while ((Math.abs(dX)>accuracy) || (Math.abs(dY)>accuracy));
        _x = tX;
        // we're done, set the final position.
        _y = tY;
    }
}

Ответы [ 2 ]

1 голос
/ 04 июня 2010

Код, который вы вставили, будет выглядеть примерно так в AS 3:

stage.addEventListener(MouseEvent.MOUSE_MOVE,follow);

function follow(evt:MouseEvent) {
 if (container.hitTestPoint(mouseX, mouseY, true)) {
  cursor.x = mouseX;
  cursor.y = mouseY;
 } else {
   var cX:Number = container.x + (container.width / 2);
        // cX/cY are 'constrained' X/Y,
        var cY:Number = container.y + (container.height / 2);
        // found somewhere inside the constraint zone.
  var tX:Number = mouseX;
  var tY:Number = mouseY;

  var accuracy:Number = 1;
        // smaller = more accurate.
        do {
            var dX:Number = (tX-cX)/2;
            // dX/dY are deltas to the midpoint between
            var dY:Number = (tY-cY)/2;
            // target XY and constrained XY.
            if (container.hitTestPoint((tX-dX), (tY-dY), true)) {
                cX += dX;
                // midpoint is in; step out towards mouse.
                cY += dY;
            } else {
                tX -= dX;
                // midpoint is out; step in towards center.
                tY -= dY;
            }
            // loop end.
            // (dD > .5) is more accurate, (dX > 10) is less.
        } while ((Math.abs(dX)>accuracy) || (Math.abs(dY)>accuracy));
        cursor.x = tX;
        // we're done, set the final position.
        cursor.y = tY;
 }
}

Это круто и хотя и не идеально, но работает достаточно быстро. Итак, я бы проверил это с вашей реальной формой. Это может быть достаточно хорошо.

0 голосов
/ 04 июня 2010

если вы используете события hittest или rollover rollout, то вы можете использовать mousex mousey, чтобы найти положение мыши. Если вам нужно как можно ближе к мышке, вы попадаете в удивительный мир проб и ошибок. Увидеть;

/ stackoverflow.com вопросы / 2389183 / флэш-ближайшая точка к мувиклипу / 2407510 # 2407510

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...