Поворот и движение объекта за целью (мышью)
Данный рецепт предназначен для тех людей, которые хотят создать что-то, что бы преследовало курсор мыши (или любую другую цель), плавно перемещаясь по экрану и поворачиваясь в сторону преследуемого объекта.
Для начала рекомендую к ознакомлению (хотя бы краткому) вот этой статьи.
Итак, традиционно, в начале привожу скрипт, который мы будем разбирать. Можете скачать сразу исходник к себе на машину, ссылка находится в конце статьи.
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 () выполняет перемещение объекта по экрану. Координата х клипа уменьшается на произведение косинуса угла поворота клипа на скорость объекта. Координата у клипа уменьшается на произведение синуса угла поворота клипа на его скорость объекта. Таким образом, достигается иллюзия плавного поворота и движения.
Смотрим что получилось тут:
Исходник примера тут: movingrotate
Комментарии