Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Почему то не работает приближение /удаление с флагом. (http://www.flasher.ru/forum/showthread.php?t=109242)

khorokhorya 10.03.2008 22:05

Почему то не работает приближение /удаление с флагом.
 
Может ошибка в написании, без abbleToPlay работает, а с ним нет((( , а мне надо , чтобы на нажатие приближалось, а когда ещё раз по нему нажали удалилось.


Код:

import mx.transitions.Tween;
import mx.transitions.easing.*;

sofiaXnach = sofia._x;
sofiaYnach = sofia._y;
sofiaXSN = sofia._xscale;
sofiaYSN = sofia._yscale;

var abbleToPlay:Boolean = true;

sofia.onRelease = function (){
    (!abbleToPlay)? this.blizko() : this.daleko();
    abbleToPlay = !abbleToPlay
}

function blizko() {
        new Tween(sofia, "_xscale", mx.transitions.easing.Regular.easeOut , sofiaXSN, 100, 3, true);
        new Tween(sofia, "_yscale", mx.transitions.easing.Regular.easeOut, sofiaYSN, 100, 3, true);
        new Tween(sofia, "_x", mx.transitions.easing.Regular.easeOut, sofiaXnach, -315, 3, true);
        new Tween(sofia, "_y", mx.transitions.easing.Regular.easeOut, sofiaYnach, -222, 3, true);
};

function daleko() {
        new Tween(sofia, "_xscale", mx.transitions.easing.Regular.easeOut , 100, sofiaXSN, 3, true);
        new Tween(sofia, "_yscale", mx.transitions.easing.Regular.easeOut, 100, sofiaYSN, 3, true);
        new Tween(sofia, "_x", mx.transitions.easing.Regular.easeOut,  -315, sofiaXnach, 3, true);
        new Tween(sofia, "_y", mx.transitions.easing.Regular.easeOut, -222,  sofiaYnach, 3, true);
};


iNils 10.03.2008 23:00

Код:

import mx.utils.Delegate;
import mx.transitions.Tween;
import mx.transitions.easing.*;
sofiaInitX = sofia._x;
sofiaInitY = sofia._y;
sofiaInitXScale = sofia._xscale;
sofiaInitYScale = sofia._yscale;
var tween:Tween = null;
var kf:Number = 0;
var flag:Boolean = false;
//
sofia.onRelease = Delegate.create (this, onRelease);
function onRelease () {
        var kf2:Number = null;
        if (flag) {
                kf2 = 0;
        } else {
                kf2 = 1;
        }
        tween.stop ();
        tween = new Tween (this, "kf", mx.transitions.easing.Regular.easeOut, kf, kf2, 3, true);
        tween.onMotionChanged = Delegate.create (this, onMotionChanged);
        flag = !flag;
}
function onMotionChanged () {
        sofia._xscale = sofiaInitXScale + (100 - sofiaInitXScale) * kf;
        sofia._yscale = sofiaInitYScale + (100 - sofiaInitYScale) * kf;
        sofia._x = sofiaInitX + (-315 - sofiaInitX) * kf;
        sofia._y = sofiaInitY + (-222 - sofiaInitY) * kf;
}


khorokhorya 10.03.2008 23:14

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

iNils 11.03.2008 00:02

У вас в корне не правильно было сделано.
1. Не надо запускать 4 твина одновременно
2. Вы не убиваете твины запуская новые, в результате они работают параллельно мешая друг другу.

Что значит заторможенно? И почему не настроить время анимации?

khorokhorya 11.03.2008 00:35

Заторможено в смысле нет гашения скорости при подходе к конечной точке, скорость линейна , хотя там написано easeOut, видимо вы убиваете твин периодически и он мелкими шажочками дотягивает до конечной точки.

iNils 11.03.2008 00:52

Есть гашение. Поставьте в onMotionChanged
Код:

trace (kf)
и увидете, что kf меняется нелинейно.

khorokhorya 11.03.2008 00:59

Спасибо, большое за помощь, я уже поняла, что там намудрила) фиговый из меня флешер, я просто не могу даже разобраться в вашем коде)

khorokhorya 11.03.2008 01:02

помогите мне пожалуйста вот с этим http://www.flasher.ru/forum/showthread.php?t=109220
может у вас есть готовый скрипт xml -меню с таким раскрытием и разъезжанием ? или намётки , где посмотреть?

iNils 11.03.2008 01:10

да все просто
импортируем классы
Код:

import mx.utils.Delegate;
import mx.transitions.Tween;
import mx.transitions.easing.*;

базовые значения свойст, я их переназвал, чтобы были более понятны всем
Код:

sofiaInitX = sofia._x;
sofiaInitY = sofia._y;
sofiaInitXScale = sofia._xscale;
sofiaInitYScale = sofia._yscale;

объявляем свойство ссылку на твин, чтобы можно было потом обратится к нему
Код:

var tween:Tween = null;
это общий коэффициент, по которому будем вычислять измения (это удобно, и возможно благодаря тому, что общее время всех ваших твинов было одно)
Код:

var kf:Number = 0;
флаг направлений вперед/назад
Код:

var flag:Boolean = false;
делегат позволяет изменить область видимости внутри функции, раньше this ссылался на sofia, а теперь на его(ее) предка
Код:

sofia.onRelease = Delegate.create (this, onRelease);
Код:

function onRelease () {
        //// определяем направление
        var kf2:Number = null;
        if (flag) {
                kf2 = 0;
        } else {
                kf2 = 1;
        }
        //// тормозим старый твин, иначе старЫЕ и новый будут работать одновременно
        tween.stop ();
        //// запускаем новый твин
        tween = new Tween (this, "kf", mx.transitions.easing.Regular.easeOut, kf, kf2, 3, true);
        //// назначаем функцию обработчик твина, который при каждом измении kf будет вызвать onMotionChanged и там узменять параметры мувика
        tween.onMotionChanged = Delegate.create (this, onMotionChanged);
        //// меняем флаг направлений
        flag = !flag;
}

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

function onMotionChanged () {
        sofia._xscale = sofiaInitXScale + (100 - sofiaInitXScale) * kf;
        sofia._yscale = sofiaInitYScale + (100 - sofiaInitYScale) * kf;
        sofia._x = sofiaInitX + (-315 - sofiaInitX) * kf;
        sofia._y = sofiaInitY + (-222 - sofiaInitY) * kf;
}



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

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