Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   stageX и localX (http://www.flasher.ru/forum/showthread.php?t=88266)

Aleksey123 20.11.2006 16:49

stageX и localX
 
Есть swf, который импортирован во flex. Проблема в позиционировании указателя мышки. Если swf разместить в самом верхнем левом углу, то stageX и stageY совпадают с координатами swf. Но если расположить swf в центре экрана то координаты для swf совпадать не будут. То есть, если в swf рисуется линия когда пользователь перемещает указатель мыши, то встроив swf во flex, он будет все время рисовать линию где-то ниже. Если написать swf на as2 все ок, так как используется отдельный плеер. Как сделать в as3?

etc 20.11.2006 17:23

А какие координаты ты берешь? stage или local?

Aleksey123 20.11.2006 17:43

Использую stage, просто у меня в swf поле состоящее и квадратов(мувиклипов) и local здесь не получается сделать.

etc 20.11.2006 17:45

Ну само собой, нужно использовать local. Не знаю, как там насчёт globalToLocal (не смотрел), можно, в конце концов, отнять от stage координаты этой самой swf относительно stage — простое преобразование в локальные координаты.

Aleksey123 20.11.2006 18:11

Не получается. localx покаывает координаты данного мувиклипа, а их у меня много, так как каждая клетка поля - мувиклип. Я хочу узнать над какой клеткой щас курсор находиться а получаю постоянно 1.1.

etc 20.11.2006 18:14

parent.mouseX =)
Я уж не знаю, зачем там stage, когда можно даже вещать собственные координаты мыши из swf во все клетки. А там уже клетка смотрит, над ней-ли курсор…

Aleksey123 20.11.2006 18:23

Че то не догоняю. Вот создаю сетку
Код:


for(var j:int=1;j<=rows;j++){
            for(var i:int=1;i<=columns;i++){
              var x:int=(i-1)*spacing;// spacing - ширина квадрата
              var y:int=(j-1)*spacing;
                cell=new tt();// квадрат нарисованный во flash
                cell.x=x;
                cell.y=y;
                addChild(cell);
            }
      }

Добавляю
Код:

addEventListener(MouseEvent.MOUSE_DOWN,myEvent);
Хочу закрасить клетку по которой кликнул мышкой

Код:

        private function myEvent (evt:MouseEvent):void {
    var x:int=Math.ceil((evt.localX)/spacing);
    var y:int=Math.ceil((evt.localY)/spacing);
    trace(stage.mouseX);
trace("xlocal="+evt.localX+" ylocal"+evt.localY);
    trace("x"+x+" y="+y);
var c:int=(y-1)*10+x;
if(flag&&getChildAt(c).currentFrame==1){
        if(predx==x || predy==y){
       
        getChildAt(predc).gotoAndStop(1);// закрашиваю квадрат

Все время выделяется клекта 1.1 а не ту которую хочу, и понятно почему.
Что я делаю не так?

FlexBuilder 20.11.2006 18:30

на крайний случай можно пользоваться stageX,Y и пересчитать в главный клип через его localToGlobal()

Aleksey123 20.11.2006 18:40

Хм :cool: может globalToLocal. но и так уже попробовал. Не выдает то что надо.
Если бы клип был один, тогда все просто, но их у меня тут 100.
а можно пример?

etc 20.11.2006 18:41

FlexBuilder, ага, только, наверное, globalToLocal


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

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