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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.09.2007, 04:38
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 1  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
Flame Некорректное срабатывание Tween

Допустим, есть кнопка, улавливающая событие MOUSE_OVER, при наступлении которого, выполняется ряд операций.
С учетом того, что событие срабатывает часто и переменных довольно много(10-15):
Правильно-ли каждый раз объявлять переменные в функции, вызываемой событием?
Код:
public function testfunc(){
	addChild(someObj);
	someObj.addEventListener(MouseEvent.MOUSE_OVER, mousefunc);
	function mousefunc(event:MouseEvent):void{
		var a..
		var b..
		var c..
		var d..
		..
		..
	}
}
..или лучше объявить их 1 раз?
Код:
public function testfunc(){
	var a..
	var b..
	var c..
	var d..
	addChild(someObj);
	someObj.addEventListener(MouseEvent.MOUSE_OVER, mousefunc);
	function mousefunc(event:MouseEvent):void{
		..
		..
	}
}
__________________
А я Томат.

Старый 23.09.2007, 05:20
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 2  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
По-моему есть более важные проблемы в оптимизации....
Например генерация и рассылка самого события ест времени больше на несколько порядков.
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©

Старый 23.09.2007, 07:10
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 3  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
Млин, тогда я вообще не понимаю в чем проблема:
Есть xml-меню. При срабатывании мышиного события на кнопках, начинается множественный tween(различные элементы кнопки двигаются/поворачиваются/становятся прозрачными и т.п.).
Проблема в том, что когда быстро передвигаю мышь с кнопки на кнопку в течении 10-15 секунд, tween, сработавший в какой-либо из кнопок, может запросто застрять где-то на середине..
Схематично, код выглядит следующим образом:
Код:
1.Создаю массив элементов меню:
var menuItem[i]:Array;
2.Создаю массив спрайтов/текстфилдов, из которых состоит данный элемент меню(фон кнопки, кружочки, 
звездочки, текстовые элементы и т.п.):
var menuItem[i].elem=[];
3.Создаю спрайт-перехватчик мышиных событий:
var menuItem[i].lst=new Sprite() 
4.При возникновении мышиного события перехожу к функции, видоизменяющей кнопку соответственным 
образом:
menuItem[i].lst.addEventListener(MouseEvent.MOUSE_OVER, tweenItem);
menuItem[i].lst.addEventListener(MouseEvent.MOUSE_OUT, tweenItem);
menuItem[i].lst.addEventListener(MouseEvent.MOUSE_DOWN, tweenItem);
5.При срабатывании функции, определяю тип события, и перебираю все составные элементы данного 
элемента меню.
for (var j:uint j<menuItem[i].elem.length())
6.У каждого из составных элементов перебираю, описанные в XML, параметры. Если значение параметра 
указано для данного мышиного события, запускаю tween.
myTween = new Tween(menuItem[i].elem[j], param, None.easeNone, this_elem_current_param_value, this_elem_new_param_value, 0.5, true);
6а.Пробовал создать массив Tween-ов - не спасает.
myTween[kkk] = new Tween(menuItem[i].elem[j], param, None.easeNone, startValue, finishValue, 0.5, true);
kkk++;
Где искать ошибку?

------
Модераторам: Переименуйте пожалуйста тему в "Некорректное срабатывание Tween"
__________________
А я Томат.


Последний раз редактировалось Torero; 23.09.2007 в 07:14.
Старый 23.09.2007, 13:15
__i вне форума Посмотреть профиль Отправить личное сообщение для __i Найти все сообщения от __i
  № 4  
Ответить с цитированием
__i
 
Аватар для __i

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
Ошибка судя по всему в твиновом классе, т.к. я тоже сталкивался с тем что твин "залипает" посреди движения, причем зависимость мне поймать не удалось, сложного ничего в моем коде небыло (просто меняется размер!)
__________________
33 коровы

Старый 23.09.2007, 13:38
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 5  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Да, с залипанием твина проблема есть. Делал приложение где до 40 твинов одновременно выполняется какждые 5 секунд. Вероятность залипания гдето 1% была. Пришлось делать принудительный fforward всем твинам через небольшой промежуток после расчетного времени окончания.(твины были движение и смена прозрачности)
__________________
4am is time to rock

Старый 23.09.2007, 17:18
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 6  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
Спасибо за ответы.
Час просиживания в гугле, привел меня к следующему оттвету на одном из буржуйских форумов:

I had this very same problem and it drove me crazy for a few days, I found this on adobe's site:

Note: Consider variable scope when using the Tween class. If a tween is created in a function, it is important that the variable's scope exists beyond the function itself. If a tween is stored to a variable of local scope, ActionScript garbage collection removes the tween as the function completes, which will likely be before the tween has even begun.

I made my tween variables class members and everything started working correctly.
------------------------
объясните пжл: Что они имеют в виду?
__________________
А я Томат.


Последний раз редактировалось Torero; 23.09.2007 в 17:35.
Старый 23.09.2007, 17:37
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 7  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Дошло....вобщем если создаешь внутри функции твин как локальную переменную, после исполнения функции ссылка исчезает и твин рискует быть собранным сборщиком мусора и перестанет работать соответственно. Ссылки на твины надо хранить в свойствах класса например, чтобы они не терялись. Поэтому и ошибка трудноуловимая.

Спасибо за информацию!
__________________
4am is time to rock

Старый 23.09.2007, 18:00
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 8  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
Проблема не в переводе - с инглишем все в норме.. Я не понимаю смысл. Что значит "Ссылки на твины надо хранить в свойствах класса"?

Код:
package {
import ....
	public class SomeClass extends Sprite {
		public var myTween:Tween
		public function SomeClass(){
			..
			..
			..
			function tweenFunc():void{
				..
				..
				myTween=.......
			}
		}
	}
}
Что не так?
__________________
А я Томат.


Последний раз редактировалось Torero; 23.09.2007 в 19:01.
Старый 23.09.2007, 18:18
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 9  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Все так. Если в этой ситуации зависают, проверяй, закончился ли твин у клипа до присвоения ему нового. если нет - сначала принудительно заканчивай предыдущий или делай continueTo...
__________________
4am is time to rock

Старый 23.09.2007, 18:23
Torero вне форума Посмотреть профиль Отправить личное сообщение для Torero Найти все сообщения от Torero
  № 10  
Ответить с цитированием
Torero
[+1.4 18.06.07]
 
Аватар для Torero

Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
Цитата:
6а.Пробовал создать массив Tween-ов - не спасает.
Код:
myTween[kkk] = new Tween(current_object, param, None.easeNone, startValue, finishValue, 0.5, true);
kkk++;
Бред какой-то.. Может нужно еще и current_object-ы в массиве хранить?
__________________
А я Томат.


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

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

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


 


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


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