![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2007
Сообщений: 10
|
Здраствуйте. Столкнулся с проблемой, возможно обсуждавшейся на форуме, но к сожалению не смог найти что-то конкретное.
Задача создать воздушный шарик, который будет себе свободно летать в указаной зоне, и при касании его мышкой он должен как бы отскакивать от курсора (эффект как будто его подбивают рукой). Само програмирование мне чуток сложно для понимания, но кое-как написал строчки для рандомного движения шарика, а вот чтобы он отбивался от курсора, попытки закончились неудачей. Вот код (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;
}
};
|
|
|||||
|
Регистрация: Nov 2007
Сообщений: 10
|
Спасибо за столь быстрый ответ.
Функция 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;
};
};
};
|
|
|||||
|
Регистрация: Dec 2006
Адрес: Novosibirsk
Сообщений: 93
|
Я бы считал и сохранял где-то вектор перемещения курсора, т.е. направление и скорость. Ну и в зависимости от длины и направления этого вектора пинал шарик.
|
|
|||||
|
Регистрация: Nov 2007
Сообщений: 10
|
Хм, знать бы как это реализовать. Я думал о варианте проще, - что при самом наведении курсора, клип отскакивал в противоположную сторону от курсора, значит отсчитывать позицию курсора непосредственно при наведении. Но и тут силенок не хватило.
|
|
|||||
|
Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
|
попробуй вычеслить угол, когда курсор оказывается внутри шарика хотя бы hitTest-ом.
|
|
|||||
|
Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
|
почитай hitTest, там есть пересечение объекта с курсором.
а скорость легко вычисляется путем сохранения предыдущих координат мыши и сравнением их с текущими.
__________________
smival.com |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 10
|
Спасибо. Буду пробовать.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 19:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|