Archive

Posts Tagged ‘физика флэш’

Поворот и движение объекта за целью (мышью)

Март 9th, 2009

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

Для начала рекомендую к ознакомлению (хотя бы краткому) вот этой статьи.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var RAD_DEG:Number = 180 / Math.PI;

_root.attachMovie ("player", "player", 0, {_x:Stage.width / 2, _y:Stage.height / 2});

game = {};
game.player = {};
game.player.clip = _root["player"];
game.player.flexibility = 5;
game.player.allowedError = 5;
game.player.speed = 5;

function rotateObject ():Void
{
var targetAngle:Number = Math.atan2 (game.player.clip._y - _root._ymouse, game.player.clip._x - _root._xmouse);
var errorAngle:Number = targetAngle * 180 / Math.PI - game.player.clip._rotation;
if (Math.abs (errorAngle) > game.player.allowedError)
{
if (((errorAngle > 0) && (errorAngle < 180)) || (errorAngle < -180))
{
game.player.clip._rotation += game.player.flexibility;
}
else
{
game.player.clip._rotation -= game.player.flexibility;
}
}
}

function moveClip ():Void
{
game.player.clip._x -= Math.cos (game.player.clip._rotation / RAD_DEG) * game.player.speed;
game.player.clip._y -= Math.sin (game.player.clip._rotation / RAD_DEG) * game.player.speed;
}

_root.onEnterFrame = function ()
{
rotateObject ();
moveClip ();
}

В строках с 12 по 27 происходит процесс поворота объекта, который подробно рассмотрен здесь. Я не буду повторно расписывать его в этом рецепте. Давайте посмотрим на строки 29 – 33. Функция moveClip () выполняет перемещение объекта по экрану. Координата х клипа уменьшается на произведение косинуса угла поворота клипа на скорость объекта. Координата у клипа уменьшается на произведение синуса угла поворота клипа на его скорость объекта. Таким образом, достигается иллюзия плавного поворота и движения.

Смотрим что получилось тут:
moving and rotate object around the mouse
Исходник примера тут: movingrotate




Новости, Создание Flash игр , , , , ,