|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Sep 2011
Сообщений: 366
|
Почему прекращается движение Tween не дойдя до конца
Вообщем есть движение Tween которое двигает ряд подгружаемых картинок если во время движения нажать на кнопку которая добавляет addchild новый муви клип на сцену и посылает запрос на сервер то движение прекращается не дойдя до конца. В чём может быть причина кто знает?
вот код если кому надо но его много и в нём трудно разобраться х) private function tween (obj:Object,zn:String,znach:Number,zkon:Number){ var tw:Tween = new Tween(obj,zn,Strong.easeIn,znach,zkon,LentaSpeed,true); trace("tween"+LentaSpeed); } private function tweenNew (obj:Object,zn:String,znach:Number,zkon:Number,timer:Number){ var tw:Tween = new Tween(obj,zn,Strong.easeIn,znach,zkon,timer,true); _switch++; // переключатель массива получаемых фоток tw.addEventListener(TweenEvent.MOTION_FINISH,tweenEvent ); } // функция загрузки private function ldf (f:String) { var foto:Loader = new Loader; foto.load(new URLRequest(f)); // здесь нужно загружать фото //foto.contentLoaderInfo.addEventListener(Event.COMPLETE, addFotoLenta); foto.contentLoaderInfo.addEventListener(Event.COMPLETE, adding); foto.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, error); function error (){ var loadingFoto:loadFoto = new loadFoto; addFotoLenta(loadingFoto); } function adding (){ addFotoLenta(foto); } // добавляет фото на ленту function addFotoLenta(foto:DisplayObject):void { if (foto.width > 100){ foto.width=100; foto.scaleY = foto.scaleX; } if (foto.height>100){ foto.height=100; foto.scaleX = foto.scaleY; } var fotoMovie:MovieClip = new MovieClip; foto.name = "foto"; fotoMovie.addChild(foto); ifoto[nFoto] = fotoMovie; if (nFoto>0){ var n:Number; for (n=lastElement;n<nFoto;n++){//двигает элементы tween (ifoto[n],"x",ifoto[n].x,ifoto[n].x+ifoto[nFoto].width+3); //удаляет элемнты if(ifoto[n].x>1000){ sprLenta.removeChild(ifoto[n]); ifoto[n] = null; lastElement++; }} if(n==nFoto){ // когда все передвинуты добавялем новую фотку ifoto[nFoto].x = -ifoto[nFoto].width; ifoto[nFoto].y = 100-ifoto[nFoto].height; addLentaAtribute(fotoMovie);// функция добавляет атрибуты к фотографиям sprLenta.addChild(ifoto[nFoto]); tweenNew(ifoto[nFoto],"x",-ifoto[nFoto].width,0, LentaSpeed);} } spLenta.addChild(sprLenta); nFoto++; } //addFotoLenta }//конец ldf private function lentaFirst():void { // когда загружаем ленту первый раз ldfoto(lentaFoto[_switch].@foto); function ldfoto (f:String) { //trace ("свич"+_switch+"login"+lentaFoto[_switch].@login); var foto:Loader = new Loader; foto.load(new URLRequest(f)); // здесь нужно загружать фото foto.contentLoaderInfo.addEventListener(Event.COMPLETE, adding); foto.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, error); function error (){ var loadingFoto:loadFoto = new loadFoto; addFirst(loadingFoto); } function adding (){ addFirst(foto); } function addFirst (foto:DisplayObject):void{ if (foto.width > 100){ foto.width=100; foto.scaleY = foto.scaleX; } if (foto.height>100){ foto.height=100; foto.scaleX = foto.scaleY; } var fotoMovie:MovieClip = new MovieClip; foto.name = "foto"; fotoMovie.addChild(foto); fotoMovie.x =prvWidth+prvX+3; fotoMovie.y = 100-fotoMovie.height; prvWidth = fotoMovie.width; prvX = fotoMovie.x; addLentaAtribute(fotoMovie);// функция добавляет атрибуты к фотографиям SpriteFirst.name = "SpriteFirst"; SpriteFirst.addChild(fotoMovie); _switch++; if(nLenta >_switch) {ldfoto(lentaFoto[_switch].@foto);} else{ifoto[nFoto] = SpriteFirst; _switch--; sprLenta.addChild(SpriteFirst); spLenta.addChild(sprLenta); tweenNew(ifoto[nFoto],"x",-ifoto[nFoto].width,-3, 1); nFoto++; firstLoad=false; idLentaFoto=lentaFoto[0].@id; } } }//ldf }//lentaFirst |
|
|||||
Lorem ipsum
|
Вот корень проблемы:
Локальная ссылка прибивается сборщиком мусора. Делай поле класса. Это будет либо ссылка на единственный активный экземпляр Tween, либо массив со всеми текущими ссылками на активные экземпляры Tween. По MOTION_FINISH ссылки удалять. Однажды мне показали Eaze Tween и я забыл весь этот морок.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Sep 2011
Сообщений: 366
|
А что значит делать поле класса? пример можно, а то я не очень про х)
А если спользовать Eaze Tween и тупо его заменить в двух функциях то будет работать норм без всяких лагов или тоже что-то удалять надо? |
|
|||||
Lorem ipsum
|
Поле класса, это переменная, которая объявлена в самом верху внутри класса, как-то так:
И заменяешь: Если заменить нативный твинер на Eaze Tween, то достаточно будет только поменять в двух функциях, да.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Sep 2011
Сообщений: 366
|
Цитата:
|
|
|||||
.
|
Цитата:
- Область видимости Class: - constants: private/protected/public constants. - properties: public properties (getter/setter) public properties (variables) -methods overridden: -public -protected public protected private - отдельно стоят calss event handlers - Constructor - Область видимости this (поля объекта): - constants: private/protected/public constants. - properties: public properties (getter/setter) public properties (variables) - other variables/constants protected private -methods overridden: -public -protected public protected private - отдельно стоят event handlers |
|
|||||
Lorem ipsum
|
Он вроде не бесплатный. Да и Eaze Tween весьма хорош, почему нет?
__________________
Поймай яблоко 2! |
|
|||||
[+4 06.05.14]
|
Что значит не бесплатный? бесплатный. Все, что свободно качается, тем более с сайта производителя = бесплатно. Потом докажи. Поэтому это бред, считать его не бесплатным.
Не бесплатно - игра, которую залили на торренты без разрешения производителя, здесь же - производитель сам дает возможность скачать оффициально. О чем речь вообще.
__________________
Марк Tween |
|
|||||
Lorem ipsum
|
__________________
Поймай яблоко 2! |
Часовой пояс GMT +4, время: 23:32. |
|
« Предыдущая тема | Следующая тема » |
|
|