Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Tween и scaleX, scaleY (http://www.flasher.ru/forum/showthread.php?t=118945)

ptirA 10.12.2008 16:26

за gTween спасбо! действительно неплохая и относительно простая в понимании штука, да вот только не решает она мой проблемы. Если кто нить понимает, подскажите плиз. Напоминаю.

по нажатию на карту она зумится, по 2у нажатию едет обратно, мне нужно чтоб в тот момент когда она зумится нельзя было вызвать mapScaleOut

как мне это отловить? если нужно могу выложить примерный код, весь не могу, там его дико много(

DarkLight 10.12.2008 16:55

Делаем флаг zoomAvailable, при старте твинов ставим его в false, подписываемся на окончание твинов (для gTween это Event.COMPLETE), и по окончании ставим его в true. В начале mapScaleOut и mapScaleIn поставить проверку:
Код AS3:

if(!zoomAvailable){
    return;
}


ptirA 10.12.2008 20:05

Я безбожно туп, с такими знаниями как у меня противопоказано пользоваться чужим кодом (gTween), что бы пользоваться чужими классами надо дойти до состояния, когда любая задача прозрачна, вот тогда в целях экономии времени можно и gTween использовать. Я делаю вот так:

Код AS3:

var zoomAvailable:Boolean;
 
var myTween_scaleX:Tween;
var myTween_scaleY:Tween;
var myTween_scaleX2:Tween;
var myTween_scaleY2:Tween;
 
 
myTween_scaleX.addEventListener(Event.COMPLETE, mapScaleIn);
myTween_scaleX2.addEventListener(Event.COMPLETE, mapScalOut);
 
function mapScaleIn()
{
        zoomAvailable = false;
        if (!zoomAvailable)
        {
          return;
        }
 
        myTween_scaleX = new Tween(main_mc, "scaleX", Regular.easeIn, mainScaleX, mainScaleXin, 1, true);
        myTween_scaleY = new Tween(main_mc, "scaleY", Regular.easeIn, mainScaleY, mainScaleYin, 1, true);
}
 
function mapScaleOut()
{
        zoomAvailable = true;
          if (!zoomAvailable)
        {
          return;
        }
        myTween_scaleX2 = new Tween(main_mc, "scaleX", Regular.easeIn, mainScaleXin, mainScaleX, 1, true);
        myTween_scaleY2 = new Tween(main_mc, "scaleY", Regular.easeIn, mainScaleYin, mainScaleY, 1, true);
}

и естественно что ничего не работает, подскажите пожалуйста безбожному тупице убившему на простую вещь много, много времени.

P.S. я понимаю что то, что я написал полный бред, хотябы из соображений логики.

DarkLight 10.12.2008 20:11

1. Фрагмент с if и присовением false флагу нужно ставить и в начале mapScaleOut. Кроме того, if должен быть до установки значения флага, а не после
2. у Tween, в отличие от gTween, событие окончания называется TweenEvent.MOTION_FINISH
3. Когда вы присваиваете переменный новый экземпляр твина, тогда и надо подписываться на момент окончания, т е строчки с подписью на окончание надо поставить внутри функций mapScaleIn/Out после создания твинов
4. По окончании твинов они должны вызывать функцию:
Код AS3:

function unlockTween(event:TweenEvent):void{
    zoomAvailable = true;
}


ptirA 10.12.2008 20:37

Код AS3:

var zoomAvailable:Boolean;
 
var myTween_scaleX:Tween;
var myTween_scaleY:Tween;
var myTween_scaleX2:Tween;
var myTween_scaleY2:Tween;
 
function unlockTween(event:TweenEvent):void
{
        zoomAvailable = true;
}
 
function mapScaleIn()
{
        if (!zoomAvailable)
        {
            return;
        }
 
        myTween_scaleX.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
        myTween_scaleX2.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
 
        myTween_scaleX = new Tween(main_mc, "scaleX", Regular.easeIn, mainScaleX, mainScaleXin, 1, true);
        myTween_scaleY = new Tween(main_mc, "scaleY", Regular.easeIn, mainScaleY, mainScaleYin, 1, true);
}
 
function mapScaleOut()
{
        if (!zoomAvailable)
        {
                  return;
        }
 
        myTween_scaleX.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
        myTween_scaleX2.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
 
        myTween_scaleX2 = new Tween(main_mc, "scaleX", Regular.easeIn, mainScaleXin, mainScaleX, 1, true);
        myTween_scaleY2 = new Tween(main_mc, "scaleY", Regular.easeIn, mainScaleYin, mainScaleY, 1, true);
}

Ругается на TweenEvent в unlockTween
1046: Type was not found or was not a compile-time constant: TweenEvent.

DarkLight 10.12.2008 20:40

Код AS3:

import fl.events.TweenEvent

пропишите
...и
Код AS3:

zoomAvailable = false

- куда делось? Просто после if поставить, а не удалить насовсем

Код AS3:

if (!zoomAvailable){
  return;
}
zoomAvailable = false

Подпись на события должна быть в самом конце функции, и только для пересозданных твинах - т е addEventListener для myTween_scaleX2 не нужен в mapScaleIn, а для myTween_scaleX - не нужен в mapScaleOut:)

ptirA 10.12.2008 20:52

Вы уверены что именно так? У меня он даже в хелпе такого не находит.
У меня прописано
Код AS3:

import fl.transitions.Tween;

ОПЛЯ! прописал fl.transitions.TweenEvent; ошибка ушла, но попрежнему не работает, т.е. все работает да вот только по старому (работает mapScaleOut до окончания mapScaleIn)

Добавлено через 37 минут
Окей) Вот

Код AS3:

import fl.transitions.TweenEvent;
 
var zoomAvailable:Boolean;
 
var myTween_scaleX:Tween;
var myTween_scaleY:Tween;
var myTween_scaleX2:Tween;
var myTween_scaleY2:Tween;
 
 
function unlockTween(event:TweenEvent):void
{
        zoomAvailable = true;
}
 
function mapScaleIn()
{
        if (!zoomAvailable)
        {
            return;
        }
        zoomAvailable = false;
        myTween_scaleX.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
        myTween_scaleY.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
 
        myTween_scaleX = new Tween(main_mc, "scaleX", Regular.easeIn, mainScaleX, mainScaleXin, 1, true);
        myTween_scaleY = new Tween(main_mc, "scaleY", Regular.easeIn, mainScaleY, mainScaleYin, 1, true);
}
 
function mapScaleOut()
{
        if (!zoomAvailable)
        {
                  return;
        }
        zoomAvailable = false;
        myTween_scaleX2.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
        myTween_scaleY2.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
 
        myTween_scaleX2 = new Tween(main_mc, "scaleX", Regular.easeIn, mainScaleXin, mainScaleX, 1, true);
        myTween_scaleY2 = new Tween(main_mc, "scaleY", Regular.easeIn, mainScaleYin, mainScaleY, 1, true);
}

Что происходит. Теперь не зумится вообще. Если во время работы mapScaleIn вызвать mapScaleOut, main_mc прыгает в конечную точку и начинает возвращаться назад. А если по русски, то когда жмешь на кнопку, происходит движение карты в заданные координаты (другая функция, не суть), но !без зума! Есл нажать на кнопку еще раз (вызвать mapScaleOut) карта прыгает на конечные координаты и пытается ехать обратно, если продолжать паралитично жать на кнопку она дергается на конечных координатах. (((

DarkLight 10.12.2008 21:31

Код AS3:

var zoomAvailable:Boolean = true;
var myTween_scaleX:Tween;
var myTween_scaleY:Tween;
var myTween_scaleX2:Tween;
var myTween_scaleY2:Tween;
 
 
function unlockTween(event:TweenEvent):void
{
        zoomAvailable = true;
}
 
function mapScaleIn()
{
        if (!zoomAvailable)
        {
            return;
        }
        zoomAvailable = false;
        myTween_scaleX = new Tween(main_mc, "scaleX", Regular.easeIn, mainScaleX, mainScaleXin, 1, true);
        myTween_scaleY = new Tween(main_mc, "scaleY", Regular.easeIn, mainScaleY, mainScaleYin, 1, true);
        myTween_scaleX.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
}
 
function mapScaleOut()
{
        if (!zoomAvailable)
        {
                  return;
        }
        zoomAvailable = false;
        myTween_scaleX2 = new Tween(main_mc, "scaleX", Regular.easeIn, mainScaleXin, mainScaleX, 1, true);
        myTween_scaleY2 = new Tween(main_mc, "scaleY", Regular.easeIn, mainScaleYin, mainScaleY, 1, true);
        myTween_scaleX2.addEventListener(TweenEvent.MOTION_FINISH, unlockTween);
}

У Вас так?

ptirA 10.12.2008 21:44

Теперь так) Зумится) но все равно когда одна из функций выполняется, вторая вызывается паралитическими кликами и карта по прежнему скачет в конечных координатах.

DarkLight 10.12.2008 21:47

Потрейсите zoomAvailable в начале функций, если переменная нигде больше не меняется, так не может быть, т к оно false всегда, когда Tween-ы выполняются


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

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