Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.11.2014, 13:12
grafillo! вне форума Посмотреть профиль Отправить личное сообщение для grafillo! Найти все сообщения от grafillo!
  № 1  
Ответить с цитированием
grafillo!

Регистрация: Sep 2011
Сообщений: 366
По умолчанию Почему прекращается движение Tween не дойдя до конца

Вообщем есть движение Tween которое двигает ряд подгружаемых картинок если во время движения нажать на кнопку которая добавляет addchild новый муви клип на сцену и посылает запрос на сервер то движение прекращается не дойдя до конца. В чём может быть причина кто знает?
вот код если кому надо но его много и в нём трудно разобраться х)
Код AS3:
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

Старый 21.11.2014, 15:33
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Вот корень проблемы:
Код AS3:
var tw:Tween
Локальная ссылка прибивается сборщиком мусора. Делай поле класса. Это будет либо ссылка на единственный активный экземпляр Tween, либо массив со всеми текущими ссылками на активные экземпляры Tween. По MOTION_FINISH ссылки удалять.

Однажды мне показали Eaze Tween и я забыл весь этот морок.
__________________
Поймай яблоко 2!

Старый 21.11.2014, 17:22
grafillo! вне форума Посмотреть профиль Отправить личное сообщение для grafillo! Найти все сообщения от grafillo!
  № 3  
Ответить с цитированием
grafillo!

Регистрация: Sep 2011
Сообщений: 366
А что значит делать поле класса? пример можно, а то я не очень про х)
А если спользовать Eaze Tween и тупо его заменить в двух функциях то будет работать норм без всяких лагов или тоже что-то удалять надо?

Старый 21.11.2014, 17:36
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Поле класса, это переменная, которая объявлена в самом верху внутри класса, как-то так:
Код AS3:
private var _tween:Tween;
И заменяешь:
Код AS3:
this._tween = new Tween(obj,zn,Strong.easeIn,znach,zkon,LentaSpeed,true);
Если заменить нативный твинер на Eaze Tween, то достаточно будет только поменять в двух функциях, да.
__________________
Поймай яблоко 2!

Старый 21.11.2014, 17:51
grafillo! вне форума Посмотреть профиль Отправить личное сообщение для grafillo! Найти все сообщения от grafillo!
  № 5  
Ответить с цитированием
grafillo!

Регистрация: Sep 2011
Сообщений: 366
Цитата:
Если заменить нативный твинер на Eaze Tween, то достаточно будет только поменять в двух функциях, да.
о норм, буду ковыряться если что спрошу сюда х)

Старый 21.11.2014, 20:49
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Однажды мне показали Eaze Tween и я забыл весь этот морок.
__________________
А че не TweenMax? Он же вообще все умеет и обновляется постоянно.
__________________
Марк Tween

Старый 21.11.2014, 20:52
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Zebestov Посмотреть сообщение
Поле класса, это переменная, которая объявлена в самом верху внутри класса
У меня объявления идут в таком порядке

Код:
- Область видимости 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
Легкая навигация по коду, особенно если есть явные указания на область видимости, такие как this или super. Отсутствие таковых говорит об области видимости класса. Взглянув на небольшой участок моего кода всегда понимаешь где локальная переменная или константа, где поле класса, а где поле объекта. То же самое относится и к методам.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 21.11.2014, 21:05
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 8  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от in4core Посмотреть сообщение
А че не TweenMax? Он же вообще все умеет и обновляется постоянно.
Он вроде не бесплатный. Да и Eaze Tween весьма хорош, почему нет?
__________________
Поймай яблоко 2!

Старый 22.11.2014, 05:17
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 9  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Что значит не бесплатный? бесплатный. Все, что свободно качается, тем более с сайта производителя = бесплатно. Потом докажи. Поэтому это бред, считать его не бесплатным.
Не бесплатно - игра, которую залили на торренты без разрешения производителя, здесь же - производитель сам дает возможность скачать оффициально. О чем речь вообще.
__________________
Марк Tween

Старый 22.11.2014, 13:53
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 10  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от in4core Посмотреть сообщение
Что значит не бесплатный?
http://greensock.com/standard-license
__________________
Поймай яблоко 2!

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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