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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.08.2014, 00:01
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 1  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
Question Tween нормально срабатывает раз через раз

Всем привет. Почти дописал прогу. Отдал заказчику на тестирование, и тот говорит, что панели которые выезжают-заезжают по нажатию очень часто останавливаются на половине пути. Анимация у меня завязана на Tween'ах. Странно, но на машине, на которой пишу приложение, таких проблем не возникало. Решил попробовать протестировать приложение на нетбуке и убедился, выезжающая панель зависает иногда. В приложении у меня всего 3 панели и один раз было что они все одновременно замерли. В чем проблема не могу понять. В поисковиках ничего подобного не нарыл. Кто чего может подсказать?

Вот часть кода с главной выезжающей панелью mainMenu (вертикальное меню с левой стороны экрана). Подгружаю XML файл, в котором прописаны названия кнопок главного меню и всякая остальная дрябедень. Отображаю главное меню. По нажатию по кнопке tab меню выезжает-заезжает - метод showHide. Но почему иногда бывает не доезжает до нужной позиции???

Код AS3:
package  {
 
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import fl.transitions.Tween;
	import fl.transitions.easing.Regular;
	import fl.transitions.TweenEvent;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	public class Main extends Sprite {
 
		private var fileLoader:URLLoader;
		private var fileRequest:URLRequest;
		private var fileXml:XML;
		private var init:MainSlide;
		private var mainMenu:MainMenu;
		private var gamePanel:GamePanel;
		private var roundPanel:RoundPanel;
		private var helpPanel:HelpPanel;
		private var currGame;
		private var currQuestion;
 
		public function Main() {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
 
			fileLoader = new URLLoader();
			fileRequest = new URLRequest("file.xml");
			fileLoader.addEventListener(Event.COMPLETE, fileLoadComplete);
			fileLoader.load(fileRequest);
		}
 
		private function fileLoadComplete(e:Event):void {
			fileXml = new XML(e.target.data);
			init = new MainSlide();
			init.bg._w = init.bg.width;
			init.bg._h = init.bg.height;
			init.logo._w = init.logo.width;
			init.logo._h = init.logo.height;
			addChild(init);
			bgResize();
			logoResize();
			mainMenu = new MainMenu();
			mainMenu.autoHide = true;
			init.addChild(mainMenu);
 
			var btnGame:Object = {};
			for (var i=0; i<fileXml.children().length(); i++){
				btnGame[i] = new ButtonGame(i+1);
				btnGame[i].scaleX = btnGame[i].scaleY = 0.8;
				btnGame[i].x = 10;
				btnGame[i].y = i * (btnGame[i].height + 5) + 10;
				btnGame[i].name = i;
				mainMenu.mc.addChild(btnGame[i]);
				btnGame[i].addEventListener(MouseEvent.CLICK, mainMenu.showHide);
				btnGame[i].addEventListener(MouseEvent.CLICK, newGamePanel);
			}
 
			mainMenuResize();
			stage.addEventListener(Event.RESIZE, stageResize);
		}
 
		private function mainMenuResize():void {
			mainMenu.newHeight = stage.stageHeight;
		}
 
		private function bgResize():void {
			var koef1 = init.bg._w / init.bg._h;
			var koef2 = stage.stageWidth / stage.stageHeight;
			if (koef2 <= koef1){
				init.bg.scaleX = init.bg.scaleY = stage.stageHeight / init.bg._h;
			} else {
				init.bg.scaleX = init.bg.scaleY = stage.stageWidth / init.bg._w;
			}
			init.bg.x = stage.stageWidth / 2 - init.bg.width / 2;
			init.bg.y = stage.stageHeight / 2 - init.bg.height / 2;
		}
 
		private function logoResize():void {
			init.logo.scaleX = init.logo.scaleY = stage.stageHeight * 0.7 / init.logo._h;
			init.logo.x = stage.stageWidth / 2 - init.logo.width / 2;
			init.logo.y = stage.stageHeight / 2 - init.logo.height / 2;
		}
 
		private function stageResize(e:Event):void {
			bgResize();
			logoResize();
			mainMenuResize();
		}
 
	}
 
}
Код AS3:
package  {
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import fl.transitions.Tween;
	import fl.transitions.easing.Regular;
 
	public class MainMenu extends Sprite {
 
		private var isOpen:Boolean;
 
		public function MainMenu() {
			autoHide = true;
 
			tab.addEventListener(MouseEvent.CLICK, showHide);
			tab.addEventListener(MouseEvent.ROLL_OVER, tabRollOver);
			tab.addEventListener(MouseEvent.ROLL_OUT, tabRollOut);
			tab.buttonMode = true;
		}
 
		public function set autoHide(b:Boolean):void {
			if (b){
				x = -90;
				isOpen = false;
				tab.arrow.scaleX = 1;
			} else { 
				x = 0;
				isOpen = true;
				tab.arrow.scaleX = -1;
			}
		}
 
		public function set newHeight(h:int):void {
			bg.height = h;
			tab.y = h / 2 - tab.height / 2;
		}
 
		public function showHide(e:MouseEvent):void {
			var _slideTo;
			if (isOpen == false){
				_slideTo = 0;
				isOpen = true;
				tab.arrow.scaleX = -1;
				stage.addEventListener(Event.ENTER_FRAME, moveButtons);
			} else {
				_slideTo = -90;
				isOpen = false;
				tab.arrow.scaleX = 1;
				stage.removeEventListener(Event.ENTER_FRAME, moveButtons);
			}
			new Tween(this, "x", Regular.easeOut, x, _slideTo, 0.5, true);
		}
 
		private function moveButtons(e:Event):void {
			if (mc.height > stage.stageHeight){
				var _perc = Math.round(stage.mouseY * 100 / stage.stageHeight);
				mc.y -= Math.round((mc.y - ((mc.height - stage.stageHeight + 10) * _perc / -100))/4);
			}
		}
 
		private function tabRollOver(e:MouseEvent):void {
			new Tween(e.target, "alpha", Regular.easeOut, e.target.alpha, 0.6, 0.2, true);
		}
 
		private function tabRollOut(e:MouseEvent):void {
			new Tween(e.target, "alpha", Regular.easeOut, e.target.alpha, 0.5, 0.2, true);
		}
	}
 
}
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок экрана 2014-08-09 в 22.55.51.png
Просмотров: 139
Размер:	412.1 Кб
ID:	31083  
__________________
кто не отвечает, того garbage collector забирает

Старый 10.08.2014, 01:29
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Твины съедает GC, сохраняйте ссылки на них. Или воспользуйтесь сторонними твинерами (к слову, получите больший прирост в скорости).
__________________
тут я

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

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
Почитал об этом GC подробнее, поразбирался. Получается, что даже сохранить ссылку в методе - этого будет мало. Нужно объявлять переменную на уровне класса, чтобы мусорщик не чистил... во как.
Либо думаю попробовать caurina.transitions.Tweener

В общем, спасибо большое! Теперь понял в каком направлении рыть )
__________________
кто не отвечает, того garbage collector забирает

Старый 10.08.2014, 18:33
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 4  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
djken, лучше твинер от greensock. Он активно поддерживает.
А caurina не обновляется уже больше пяти лет.

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

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
illuzor, ок, спасибо
__________________
кто не отвечает, того garbage collector забирает

Старый 10.08.2014, 19:23
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Гринсок надо покупать, если проект продается. Поэтому лучше EazeTween.
__________________
тут я

Старый 11.08.2014, 07:40
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А caurina не обновляется уже больше пяти лет.
Да какая разница. Если нужны только твины, то caurina самое-то. Ничего нового там уже не придумаешь, все нужные твины есть. В гринсоковские либы понатолкали кучу всего, лично мне даже одной десятой их этого не нужно
__________________
Ко мне можно и нужно обращаться на ты)

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

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

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


 


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


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