Форум 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=155540)

Ossikuro 06.05.2011 01:25

плавное изменение координаты объекта
 
Здравствуйте, столкнулась с таким вопросом:
Есть сцена, внутри которой на 1 кадре лежит меню, которое выдвигается в 3 приема (закрыто, открыто наполовину, открыто полностью). Однако оно у меня не выдвигается плавно, а просто меняет координату, поэтому выглядит как скачки. Подскажите пожалуйста как реализовать плавное "выезжание" и обратное "возвращение" програмно?

Пока живу с таким кодом.
Код AS3:

//Слушаем события мыши
PAGE.PAGE_BKG.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
MENU.btn_up.addEventListener(MouseEvent.MOUSE_DOWN, StartMenuDrag);
MENU.btn_up.addEventListener(MouseEvent.MOUSE_UP, StoptMenuDrag);
MENU.btn_down.addEventListener(MouseEvent.MOUSE_DOWN, StartMenuDrag);
MENU.btn_down.addEventListener(MouseEvent.MOUSE_UP, StoptMenuDrag);
MENU.btn_up.addEventListener(MouseEvent.CLICK,upClick);
MENU.btn_down.addEventListener(MouseEvent.CLICK,downClick);
PAGE.addEventListener(MouseEvent.CLICK,stageClick);
 
function stageClick (e:MouseEvent):void {
  MENU.y=1020;
  closed = true;
  half_opened = false;
  opened = false;
  MENU.btn_up.visible=true;
  MENU.btn_up_un.visible=false;}
 
//события по верхней кнопке
function upClick (e:MouseEvent):void {
if (closed){
  MENU.y=984;
  closed = false;
  half_opened = true;
  opened = false;
  MENU.btn_up.visible=true;
  MENU.btn_up_un.visible=false;}
 
else if (half_opened){
  MENU.y=788;
  closed = false;
  half_opened = false;
  opened = true;
  MENU.btn_up.visible=false;
  MENU.btn_up_un.visible=true;}
 
else if (opened) {
  closed = false;
  half_opened = false;
  opened = true;
  MENU.btn_up.visible=false;
  MENU.btn_up_un.visible=true;}
}
 
//события по нижней кнопке
function downClick (e:MouseEvent):void {
 
  if (half_opened){
  MENU.y=1020;
  closed = true;
  half_opened = false;
  opened = false;
  MENU.btn_up.visible=true;
  MENU.btn_up_un.visible=false;}
 
  else if (opened) {
  MENU.y=984;
  closed = false;
  half_opened = true;
  opened = false;
  MENU.btn_up.visible=true;
  MENU.btn_up_un.visible=false;}
 
  else if (closed){
  MENU.y=1020;
  closed = true;
  half_opened = false;
  opened = false;
  MENU.btn_up.visible=true;
  MENU.btn_up_un.visible=false;}
}
 
 
 
//Выдвигаем меню
function StartMenuDrag(event:MouseEvent):void
{       
        MENU.startDrag(false, new Rectangle(0,1020,0,-235));
 
}
//Закончили двигать
 
        function StoptMenuDrag(event:MouseEvent):void
{
        MENU.stopDrag();
        //var s:int = MENU.y;
        //trace(s);
 
}


DZHETIGAPA 06.05.2011 01:33

создаешь событие EnterFrame и в слушателе пишешь что-то в этом роде:
Код AS3:

menu.y++//либо menu.y+=2...........n
if (menu.y ==1000) removeEventListener(Event.ENTER_FRAME, onFRame)

Думаю смысл ты поняла.

Либо пользуся твинами и ТвинЛайтом

Ossikuro 06.05.2011 02:10

Большое спасибо))

woland24 06.05.2011 10:53

А что вам мешает воспользоваться твинером? Хотя бы стандартным fl.transitions.Tween?

Ossikuro 06.05.2011 10:55

Попробовала сегодня с утра вставить эти строчки. И что-то работает, только если я в 1 сторону это движение использую, например на задвигание меню, а если я хочу и выдвигать и прятать плавно - вообще ничего не происходит). Подскажите пожалуйста еще раз где накосячила:
Код AS3:

PAGE.PAGE_BKG.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
MENU.btn_up.addEventListener(MouseEvent.MOUSE_DOWN, StartMenuDrag);
MENU.btn_up.addEventListener(MouseEvent.MOUSE_UP, StoptMenuDrag);
MENU.btn_down.addEventListener(MouseEvent.MOUSE_DOWN, StartMenuDrag);
MENU.btn_down.addEventListener(MouseEvent.MOUSE_UP, StoptMenuDrag);
MENU.btn_up.addEventListener(MouseEvent.CLICK,upClick);
//MENU.btn_down.addEventListener(MouseEvent.CLICK,downClick);
PAGE.addEventListener(MouseEvent.CLICK,stageClick);
 
function slideback (e:Event):void{
        MENU.y+=10;
        if (MENU.y==1020||MENU.y>1020){
                stage.removeEventListener(Event.ENTER_FRAME,slideback);
                MENU.y=1020;
        }
}
 
function slideon(e:Event):void{
        MENU.y-=10;
        if (MENU.y==984||MENU.y>984&&MENU.y<788&&half_opened){
        stage.removeEventListener(Event.ENTER_FRAME,slideon);
        MENU.y=984;}
        else if (MENU.y==788||MENU.y<788&&opened){
        stage.removeEventListener(Event.ENTER_FRAME,slideon);
        MENU.y=788;
        }
}
 
function stageClick (e:MouseEvent):void {
  stage.addEventListener(Event.ENTER_FRAME,slideback);
  //MENU.y=1020;
  closed = true;
  half_opened = false;
  opened = false;
  MENU.btn_up.visible=true;
  MENU.btn_up_un.visible=false;}
 
//события по верхней кнопке
function upClick (e:MouseEvent):void {
if (closed){
  stage.addEventListener(Event.ENTER_FRAME, slideon);
  closed = false;
  half_opened = true;
  opened = false;
  MENU.btn_up.visible=true;
  MENU.btn_up_un.visible=false;}
 
else if (half_opened){
  stage.addEventListener(Event.ENTER_FRAME, slideon);
  closed = false;
  half_opened = false;
  opened = true;
  MENU.btn_up.visible=false;
  MENU.btn_up_un.visible=true;}
 
else if (opened) {
  closed = false;
  half_opened = false;
  opened = true;
  MENU.btn_up.visible=false;
  MENU.btn_up_un.visible=true;}
}



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

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