Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   проблемы с разворотом (http://www.flasher.ru/forum/showthread.php?t=179365)

MAGISTRS 13.05.2012 18:57

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

private function updateRotation():void
      {
          // РАСЧЕТ ВРАЩЕНИЯ ПУШКИ
          dx = player.x - stage.mouseX;
          dy = player.y - stage.mouseY;
 
          // В КАКУЮ СТОРОНУ ПОВОРАЧИВАТЬ
          var rotateTo:Number = getDegrees(getRadians(dx, dy)); 
 
  // ПОВОРАЧИВАТЬ ОТ 0 ДО 360 ГРАД
          if (rotateTo > player.rotation + 180) rotateTo -= 360;
          if (rotateTo < player.rotation - 180) rotateTo += 360;
 
          // ЛЕГКОСТЬ ВРАЩЕНИЯ
          trueRotation = (rotateTo - player.rotation) /rotateSpeedMax;
  player.rotation += trueRotation;
      } 
public function getRadians(delta_x:Number, delta_y:Number):Number
      {
          var r:Number = Math.atan2(delta_y, delta_x);
  if (delta_y < 0)
          {
              r += (2*Math.PI);
          }
          return r;
      }
 
      public function getDegrees(radians:Number):Number
      {
                      return Math.floor(radians/(Math.PI/180));
      }

пробовал и rotateTo менять, и r - но получается какая-то ересь..

Nooob 13.05.2012 19:29

Код AS3:

stage.addEventListener(Event.ENTER_FRAME, updateRotation);
var rotate:Number = player.rotation;
function updateRotation(event:Event):void
{
        var dx:Number = player.x - stage.mouseX;
        var dy:Number = player.y - stage.mouseY;
        var rotateTo:Number = Math.atan2(dy,dx) * 180 / Math.PI;
        if (rotateTo > rotate + 180) rotateTo -= 360;
        if (rotateTo < rotate - 180) rotateTo += 360;
        rotate += (rotateTo - rotate) / rotateSpeedMax;
        player.rotation = Math.round(rotate / 90) * 90;
}


MAGISTRS 13.05.2012 19:50

спасибо, конечно за помощь...но мне надо исправить именно в этом коде...(слишком много завязанных друг на друге функций)
P.S. я наверно не так выразился.. вот стоит пушка. к примеру - в центре stage"а. и смотрит прямо (на 12 часов), по перемещению мышки в разные стороны - пушка "следит" за мышкой и поворачивается в её сторону, но если мышька уходит "за" пушку - тоесть координаты у выше чем у самой пушки, то пушка поворачивается и останавливается на 90 градусах (то есть на 3 часа) (как буд-то ей что-то мешает..не знаю как сказать =) )... и то же самое с поворотом на 9 часов. плавный переход (по энтер фрейму) и остановка, в случае если мышка зайдет ниже пушки


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

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