Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Воздушный шарик средствами AS (http://www.flasher.ru/forum/showthread.php?t=110859)

Leeto 10.04.2008 12:43

Воздушный шарик средствами AS
 
Здраствуйте. Столкнулся с проблемой, возможно обсуждавшейся на форуме, но к сожалению не смог найти что-то конкретное.

Задача создать воздушный шарик, который будет себе свободно летать в указаной зоне, и при касании его мышкой он должен как бы отскакивать от курсора (эффект как будто его подбивают рукой).

Само програмирование мне чуток сложно для понимания, но кое-как написал строчки для рандомного движения шарика, а вот чтобы он отбивался от курсора, попытки закончились неудачей.
Вот код (mc - тот самый шарик):
Код:

function randRange(min:Number, max:Number):Number {
    var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
    return randomNum;
}


speed = 1;
movx = 'right';
movy = 'up';
mc._x = 0;
mc._y = 0;
onEnterFrame = function () {
        var borderX:Number = randRange(0, 1500);
        var borderY:Number = randRange(0, 1400);
       
        if (mc._x == 0) {
                movx = 'right';
        }
        if (mc._x == 550 or mc._x>=borderX*2) {
                movx = 'left';
        }
        if (mc._y == 0) {
                movy = 'down';
        }
        if (mc._y == 400 or mc._y>=borderY*3) {
                movy = 'up';
        }
        if (movx == 'right') {
                mc._x += speed;
        }
        if (movx == 'left') {
                mc._x -= speed;
        }
        if (movy == 'down') {
                mc._y += speed;
        }
        if (movy == 'up') {
                mc._y -= speed;
        }
};

Товарищи флешеры помогите пожалуйста решить проблему. Буду очень признателен за совет или давно написаный код.

Волгоградец 10.04.2008 13:25

Кода нет, есть совет:
Код:

ball.onRollOver = function ():Void{
  this._y -= 10;
}

ball - имя шарика.
onRollOver - этот метод срабатывает, когда наводишь мышью на клип.

Leeto 10.04.2008 14:16

Спасибо за столь быстрый ответ.

Функция onRollOver само собой, но в даном случае шарик прыгнет по _у в верх.
Но нужен учет положения курсора по _х. Если он слева от шарика, значит при наведении должен уходить в право, если курсор справа, тогда влево.

Вот моя очередная попытка, но в даном случае отслеживается положение курсора относительно самого клипа, но никак не при наведении.

Код:

function randRange(min:Number, max:Number):Number {
        var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
        return randomNum;
}


speed = .2;
movx = 'right';
movy = 'up';
mc._x = 200;
mc._y = 200;
onEnterFrame = function () {
        var borderX:Number = randRange(0, 1500);
        var borderY:Number = randRange(0, 1400);
        if (mc._x == 0) {
                movx = 'right';
        }
        if (mc._x == 550 or mc._x>=borderX*2) {
                movx = 'left';
        }
        if (mc._y == 0) {
                movy = 'down';
        }
        if (mc._y == 400 or mc._y>=borderY*3) {
                movy = 'up';
        }
        if (movx == 'right') {
                mc._x += speed;
        }
        if (movx == 'left') {
                mc._x -= speed;
        }
        if (movy == 'down') {
                mc._y += speed;
        }
        if (movy == 'up') {
                mc._y -= speed;
        }
};
mc.onRollOver = function() {
onEnterFrame = function() {

                if (_xmouse<=mc._x) {
                        mc._x += 2;
        };
                        if (_xmouse>=mc._x) {
                        mc._x -= 2;
        };
                        if (_ymouse<=mc._y) {
                        mc._y += 2;
        };
                        if (_ymouse>=mc._y) {
                        mc._y -= 2;
        };
};
};

Не знаю, может я избрал не совсем верный путь для реализации или не правильно использовал код.

Волгоградец 10.04.2008 15:41

Код:

ball.onRollOver = function ():Void{
  var iks:Number = this._x - _root._xmouse;
  var igr:Number = this._y - _root._ymouse;
  this._x += iks;
  this._y += igr;
}


bebop 10.04.2008 17:26

Я бы считал и сохранял где-то вектор перемещения курсора, т.е. направление и скорость. Ну и в зависимости от длины и направления этого вектора пинал шарик.

Leeto 10.04.2008 22:41

Хм, знать бы как это реализовать. Я думал о варианте проще, - что при самом наведении курсора, клип отскакивал в противоположную сторону от курсора, значит отсчитывать позицию курсора непосредственно при наведении. Но и тут силенок не хватило.

NoCD 11.04.2008 00:55

попробуй вычеслить угол, когда курсор оказывается внутри шарика хотя бы hitTest-ом.

$mival 11.04.2008 06:08

почитай hitTest, там есть пересечение объекта с курсором.

а скорость легко вычисляется путем сохранения предыдущих координат мыши и сравнением их с текущими.

Leeto 11.04.2008 12:16

Спасибо. Буду пробовать.


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

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