Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Определить координаты угла в момент "rotation" (http://www.flasher.ru/forum/showthread.php?t=131993)

_moscow 02.11.2009 09:49

Определить координаты угла в момент "rotation"
 
Всем привет !


Код AS3:

 
  var cont:MovieClip = new MovieClip();
 
  var mc:MovieClip = new MovieClip();
      mc.graphics.beginFill(color);
      mc.graphics.drawRect(-50, -50 ,100,100);
 
      cont.addChild(mc);
              addChild(cont);
 
 
      // теперь мне нужно  двигать обьект "cout" так что-б    верхний правый угол обекта  "mc" всегда был на мышке !
      addEventListener(Event.ENTER_FRAME,test);
 
    function test(event:Event):void
    {
        cont.x =  mouseX-(cont.width/2);
        cont.ymouseY+(cont.height/2);
    }
 
      // все работает хорошо - но когда я сделаю
 
    cont.rotation = 30;
 
    // я уже не попадаю в верхний правый угол .

как узнать на сколько происходит смещение обькта когда у него (rotation > 0) ?

Artic 02.11.2009 10:14

Код AS3:

var cont:MovieClip = new MovieClip();
 
  var mc:MovieClip = new MovieClip();
      mc.graphics.beginFill(0x00ff00);
      mc.graphics.drawRect(0,0 ,100,100);
      mc.graphics.endFill();
          mc.x = -mc.width/2;
          mc.y = -mc.height/2;
      cont.addChild(mc);
      addChild(cont);
 
 
      // теперь мне нужно привязать к мышке верхний правый угол обекта  "cont"
 
 
      cont.x =  mouseX-(cont.width/2);
      cont.ymouseY+(cont.height/2);
 
      // все работает хорошо - но когда я сделаю
 cont.addEventListener(Event.ENTER_FRAME,test);
 
 
    // я уже не попадаю в верхний правый угол .
 
    // обьект "mc" должен всегда быть по центру обьекта "cont"
        function test(event:Event):void
        {
                event.target.rotation+=1;
 
 
        }

?

_moscow 02.11.2009 10:26

Artic Спасибо но это не то , я отредактировал первый пост - так как плохо обьяснил суть проблемы !

Artic 02.11.2009 10:36

Код AS3:

var cont:MovieClip = new MovieClip();
 
  var mc:MovieClip = new MovieClip();
      mc.graphics.beginFill(0x00ff00);
      mc.graphics.drawRect(-100,0 ,100,100);
      mc.graphics.endFill();
          cont.addChild(mc);
      addChild(cont);
 
 
      // теперь мне нужно привязать к мышке верхний правый угол обекта  "cont"
 
 
      cont.xmouseX
      cont.ymouseY
 
      // все работает хорошо - но когда я сделаю
 cont.addEventListener(Event.ENTER_FRAME,test);
    stage.addEventListener(MouseEvent.MOUSE_MOVE,setContCoord);
 
    // я уже не попадаю в верхний правый угол .
 
    // обьект "mc" должен всегда быть по центру обьекта "cont"
        function test(event:Event):void
        {
                event.target.rotation+=1;
        }
        function setContCoord(event:MouseEvent):void
        {
 
                cont.x = event.stageX
                cont.y = event.stageY
 
        }


_moscow 02.11.2009 10:41

Код AS3:

mc.graphics.drawRect(-100,0 ,100,100);

обьект "mc" всегда должен быть по центру обьекта "cont"

Код AS3:

mc.graphics.drawRect(-50, -50 ,100,100);


switcher! 02.11.2009 11:29

ориентировался по твоему первому посту до редактирования, но, думаю, все равно "вытащишь" из примера что нужно:
Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class Main extends Sprite {
                private var s:MyRectangle = new MyRectangle();
 
                function Main():void {
                        stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
 
                        s.rotation = 30;
                        addChild(s);
                }
 
                private function onMove(e:MouseEvent):void {
                        s.x = mouseX - s.dX;
                        s.y = mouseY - s.dY;
                        s.rotation += 1;
                }
        }
}

Код AS3:

package {
        import flash.display.Sprite;
 
        public class MyRectangle extends Sprite {
                public var dX:Number = 0;
                public var dY:Number = 0;
 
                private var _width:Number;
 
                function MyRectangle():void {
                        graphics.beginFill(0);
                        graphics.drawRect(0, 0, 40, 20);
 
                        _width = width;
                }
 
                public override function set rotation(value:Number):void {
                        dX = Math.cos(value * Math.PI / 180)*_width;
                        dY = Math.sin(value * Math.PI / 180)*_width;
                        super.rotation = value;
                }
        }
}


_moscow 02.11.2009 12:34

switcher! Спасибо большое - это почти то что мне нужно !

но мне нужно изминить одну строку в классе "MyRectangle"

вот так
Код AS3:

graphics.drawRect(-50, -50, 100, 100);

а если я изминяю я уже не попадаю в верхний правый угол !

что -то у меня нехватает знаний подправить под мои нужды ! :rolleyes::rolleyes:

switcher! 02.11.2009 12:53

изменение:
Код AS3:

package {
        import flash.display.Sprite;
 
        public class MyRectangle extends Sprite {
                public var dX:Number = 0;
                public var dY:Number = 0;
 
                private var _radius:Number;
 
                private const DELTA_ANGLE:Number = 45;
 
                function MyRectangle():void {
                        graphics.beginFill(0);
                        graphics.drawRect(-50, -50, 100, 100);
 
                        _radius = Math.sqrt(width*width + height*height) >> 1;
                }
 
                public override function set rotation(value:Number):void {
                        dX = Math.cos((value - DELTA_ANGLE) * Math.PI / 180) * _radius;
                        dY = Math.sin((value - DELTA_ANGLE) * Math.PI / 180) * _radius;
                        super.rotation = value;
                }
        }
}


_moscow 02.11.2009 16:01

Спасибо switcher! написал тебе благодарность в личку !


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

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