Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   проблема с Tween (http://www.flasher.ru/forum/showthread.php?t=121785)

SarGun 23.02.2009 20:42

проблема с Tween
 
Вложений: 1
Подскажите почему у меня класс Tween, когда быстро водишь мышкой недоконца выполняет заданную анимацию?
исходник в приложении..

Fergus 23.02.2009 20:49

Потому что класс Tween нормально не работает. Используйте пользовательские библиотеки, например GTween.

Gaen 23.02.2009 20:53

Кстати, можете рассказать, за что все так не любят стандартный Tween? При каких условиях он барахлит?

SarGun 23.02.2009 20:59

Цитата:

Сообщение от Fergus (Сообщение 800493)
Используйте пользовательские библиотеки, например GTween.

а неподскажите где их достать?

Kuruki 23.02.2009 21:11

SarGun, вы присваиваете твин локальным переменным, которые удаляются после выполнения функции.

Fergus 23.02.2009 21:28

Цитата:

Сообщение от GAIKER (Сообщение 800494)
Кстати, можете рассказать, за что все так не любят стандартный Tween? При каких условиях он барахлит?

Где-то видел сравнение работы твинов - легко поиском найдете - так там все твины пользовательские выдают 35-45 фпс, а адобовский твин что-то вроде 0.001... В реальности просто вешает флешплеер на объемных задачах. Но там для теста какая-то сумасшедшая нагрузка стоит, конечно.

Он начинает глючить когда их работает несколько. Сбивается, когда движущийся объект принимает события (мышиные, например).

CrazyFlasher 23.02.2009 21:29

TweenLite -> google.com

Alex Lexcuk 23.02.2009 22:53

Tween мега стабильный и самый быстрый. Юзаю flex и компилю в нем под 10, так подсунул ему библиотеку из flash cs3 и в этой ситуации tween не подводит.
По вашему коду, вы запускаете твины когда они еще не выполнились, в это же время создаете новые твины, которые должны разорвать объект в разные стороны, но твин добрый и он пытается что-то делать и флешка не вылетает. Вот рабочий код
Код:

import fl.transitions.easing.*;
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
var arr:Array = [];
var ob:Object;
var c:int = 0;
var eff:int = 300;
for (var i:int = 0; i<10; i++) {
        for (var j:int = 0; j<10; j++) {
                var cont:Sprite = new Sprite();
                cont.x = (i+5) * (image.width/10);
                cont.y = (j+5) * (image.width/10);
                addChild(cont);
                var myBitmapData:BitmapData = new BitmapData(image.width / 10,image.height / 10);
                var rect:Rectangle = new Rectangle(0,0,image.width / 10,image.height / 10);
                var matrix:Matrix = new Matrix();
                matrix.tx = i * image.width / 10 * -1;
                matrix.ty = j * image.width / 10 * -1;
                myBitmapData.draw(image,matrix,null,null,rect,true);
                var bitmap:Bitmap = new Bitmap(myBitmapData);
                bitmap.x = bitmap.width / 2 * -1;
                bitmap.y = bitmap.height / 2 * -1;
                cont.addChild(bitmap);
                cont.addEventListener(MouseEvent.MOUSE_OVER, over);
                cont.addEventListener(MouseEvent.MOUSE_OUT, out);
                cont.name = ""+c;
                arr[c] = ob = new Object();

                ob.sp = cont;
                ob.i = 0;
                ob.tw = new Tween(ob, "i", None.easeNone, 0, 200, 2, true);
                ob.tw.addEventListener(TweenEvent.MOTION_CHANGE, twChange);
                ob.tw.stop();
                ob.done = false;
                ob.id = c;
                ob.x = cont.x;
                ob.y = cont.y;
                ob.finX = Math.random() * cont.x + cont.x / 2;
                ob.finY = Math.random() * cont.y + cont.y / 2;
                ob.indX = (ob.finX - ob.x)/100;
                ob.indY = (ob.finY - ob.y)/100;
                c++;
        }
}
removeChild(image);

function over(event:MouseEvent) {
        c = int(event.target.name);
        ob = arr[c];
        ob.tw.start();
               
        ob.finX = ob.x + (eff/2 - Math.random() *eff);
        ob.finY = ob.y + (eff/2 - Math.random() *eff);
        ob.indX = (ob.finX - ob.x)/100;
        ob.indY = (ob.finY - ob.y)/100;
               
        addChild(ob.sp);
}
function out(event:MouseEvent) {

}

function twChange(evt:TweenEvent):void
{
ob = evt.target.obj;
        if (ob.i<100){
                ob.sp.x = ob.x + ob.i * ob.indX;
                ob.sp.y = ob.y + ob.i * ob.indY;
        }
        else{
                ob.sp.x = ob.x + (200 - ob.i) * ob.indX;
                ob.sp.y = ob.y + (200 - ob.i) * ob.indY;
        }
}

Делается массив из объектов и к этим объекта привязываются твины, теперь работу твина нарушать нечему и он всегда выполниться дойдет и все такое.

iSeeYou 23.02.2009 22:57

Сам сталкивался с этим...
создай массив и пихай туда все твины
Код AS3:

var _tweens:Array = new Array();
var new_tween:Tween = new Tween(...);
_tweens.push(new_tween);

это поможет :)
переодически желательно очищать массив


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

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