Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   localToGlobal - не пересчитывает координаты! (http://www.flasher.ru/forum/showthread.php?t=127229)

vadimled 08.07.2009 15:04

localToGlobal - не пересчитывает координаты!
 
После пары дней попыток понял, что ничего не понял.
Намерено не отображаю все попытки использования localToGlobal
Упрощенный код проекта (там же и задача):
Код:

package{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import figura;

        public class problem extends Sprite{
       
                        public var pF:figura;
                                        var i:uint=0;

        public function problem(){
                addChild(pBtnCreate);
                addEventListener("enterFrame",on_clk_btn_create);

        }
        function on_clk_btn_create(event:Event){
                if(pBtnCreate.flag_on){
                                          removeEventListener("enterFrame",on_clk_btn_create);
                                        pF = new figura();
                                        addChild(pF);
                                  }
                }
        }
}}
//----------------------------------------------------------------------------
package{
        import flash.geom.*;


        public class figura extends Sprite{

                public function figura(){
                        pX =  200;
                        pY =  300;
                        draw();
                                addEventListener("mouseDown",ClickDownButton);
                }

          private function draw(x:uint,y:uint):void {
                                graphics.beginFill(0xFF9966);
                                graphics.drawRect(pX,pY, 60, 60);
                                graphics.endFill();
        //                        Тут фигура рисуется правильно,по глобальным координатам
        }

        function ClickDownButton(event:MouseEvent):void {
                removeEventListener("mouseDown",ClickDownButton);
//По клику мыши фигура должна переместится в точку x = 400,y = 10(глобальные)
                this.x = 400;
                this.y = 10;
//        Вопрос: как применить "localToGlobal"?
        }
}}

Подскажите,спецы, где я напутал?

wvxvw 08.07.2009 15:13

вам нужно globalToLocal, а не наоборот...

vadimled 08.07.2009 15:41

Сейчас порпробую

Добавлено через 20 минут
Результата нет
Код:

package{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import figura;

        public class problem extends Sprite{
       
                        public var pF:figura;
                                        var i:uint=0;

        public function problem(){
                addChild(pBtnCreate);
                addEventListener("enterFrame",on_clk_btn_create);

        }
        function on_clk_btn_create(event:Event){
                if(pBtnCreate.flag_on){
                                          removeEventListener("enterFrame",on_clk_btn_create);

                                  for( i=0; i < pmap.mainPoint.length;i++){
                                                pF = new figura();
                                            addChild(pF);
                                  }
                }
        }
}}
//----------------------------------------------------------------------------
package{
        import flash.geom.*;


        public class figura extends Sprite{

                public function figura(){
                        pX =  200;
                        pY =  300;
                        draw();
                                addEventListener("mouseDown",ClickDownButton);
                }

          private function draw(x:uint,y:uint):void {
                                graphics.beginFill(0xFF9966);
                                graphics.drawRect(pX,pY, 60, 60);
                                graphics.endFill();
        //                        Тут фигура рисуется правильно,по глобальным координатам
        }

        function ClickDownButton(event:MouseEvent):void {
                removeEventListener("mouseDown",ClickDownButton);
//По клику мыши фигура должна переместится в точку x = 400,y = 10(глобальные)
                var dpX:int = 400;
                var dpY:int = 10;
               
//        Попробовал так.
                var stagePoint:Point = new Point(dpX,dpY);
                var mypoint:Point = bigFigura.globalToLocal(stagePoint);
                                this.x = mypoint.x;                                               
                                this.y = mypoint.y;

        }
}}

Добавлено через 21 минуту
ОшибкаbigFigura.

Добавлено через 4 часа 53 минуты
Все!Разобрался без globalToLocal. Если кому интересно, отвечу с удовольствием.

nnk 15.07.2009 11:01

у меня тож тут такая проблема слухи говорят о том в моем коде надо через localToGlobal, но как я немогу может поможете вот мой код
Код AS3:

map.addEventListener(MouseEvent.MOUSE_WHEEL, MEvent);
 
function MEvent(event:MouseEvent):void{
                                var mod:Number = 10;
 
                                map.scaleX += event.delta / mod;
                                map.scaleY += event.delta / mod;
 
// здесь направо убегает после масштабирования
                                map.x = ((2 * mouseX) - (2 * (event.localX * map.scaleX))) / 2;
                                map.y = ((2 * mouseY) - (2 * (event.localY * map.scaleY))) / 2;
 
                }

Добавлено через 1 минуту
масштабирование должно от курсора мышки, т.е. центр масштабирования где курсор мышки

vadimled 15.07.2009 11:24

Ну,насколько я понимаю, localToGlobal тут ни причем. Проблема в том что,что "scale" не массштабирует относительно центра фигуры а относительно её нуля. Я в таких случаях расчитываю компенсацию на смещение, что-то типа такого:
Код AS3:

this.x = dpX+(<font color="Red">sizeMuvikfont>-(<font color="Red">sizeMuvikfont> * this.scaleX));
this.y = dpY+(<font color="Red">sizeMuvikfont>-(<font color="Red">sizeMuvikfont> * this.scaleX));

Добавлено через 1 минуту
Некрасиво получилось.

Код AS3:

this.x = dpX+(sizeMuvik-(sizeMuvik* this.scaleX));
this.y = dpY+(sizeMuvik-(sizeMuvik* this.scaleX));



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

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