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

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

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

Регистрация: Feb 2010
Сообщений: 3
По умолчанию Проблема с масштабированием

Привет. написал такой код. при наведении курсора клип плавно масштабируется. но только один раз. когда навожу второй раз клип масштабируется резко и не полностью.
даю сам код. посмотрите.(только не строго судите - я два дня как AS3 програмист).

Код AS3:
var xMax:Number = 100;
var xMin:Number = 50;	
///////////////////////////////////////////////////
clp.addEventListener(MouseEvent.MOUSE_OVER, zoomIN);
function zoomIN(e:MouseEvent):void{
 
		addEventListener(Event.ENTER_FRAME, prr); 
			function prr(e:Event):void{
				for (var i:Number=clp.width; i<xMax; i++){
  					clp.width +=.2;
    				clp.height +=.2;
				}
			}
		}
////////////////////////////////////////////////////
clp.addEventListener(MouseEvent.MOUSE_OUT, zoomOUT);
function zoomOUT(e:MouseEvent):void{
 
		addEventListener(Event.ENTER_FRAME, prr); 
			function prr(e:Event):void{
				for (var i:Number=clp.width; i>xMin; i--){
					clp.width -=.2;		
					clp.height -=.2;
				}
			}	
		}

Старый 26.02.2010, 15:43
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 2  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
делайте removeEventListener в функции prr()

Старый 26.02.2010, 16:32
oleg989 вне форума Посмотреть профиль Отправить личное сообщение для oleg989 Найти все сообщения от oleg989
  № 3  
Ответить с цитированием
oleg989

Регистрация: Feb 2010
Сообщений: 3
добавляю вот эту строчку
Код AS3:
clp.removeEventListener(Event.ENTER_FRAME, prr);
не работает. вставлял повсюду(в цикл, за циклом)...

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

Регистрация: Jun 2006
Сообщений: 400
на всякий случай. в обе функции вставляете эту строчку?

Думаю с циклами вы намудрили. Читаемость хромает, отсюда и ошибка вылезла скорей всего. Так с ходу не пойму.

Код AS3:
var xMax:Number = 50;
 
///////////////////////////////////////////////////
clp.addEventListener(MouseEvent.MOUSE_OVER, zoomIN);
function zoomIN(e:MouseEvent):void{
 
		addEventListener(Event.ENTER_FRAME, prr); 
			function prr(e:Event):void{
				for (var i:Number=0; i<xMax; i++){
  					clp.width +=.2;
    				clp.height +=.2;
				}
			}
		}
////////////////////////////////////////////////////
clp.addEventListener(MouseEvent.MOUSE_OUT, zoomOUT);
function zoomOUT(e:MouseEvent):void{
 
		addEventListener(Event.ENTER_FRAME, prr); 
			function prr(e:Event):void{
				for (var i:Number=0; i<xMax; i++){
					clp.width -=.2;		
					clp.height -=.2;
				}
			}	
		}
Почему не так сделали?

И в цикле счетчиком лучше int делать или uint.

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

Регистрация: Feb 2010
Сообщений: 3
ок. спасибо.

Старый 27.02.2010, 11:05
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
блин, ненавижу кложуры..
нельзя было сделать вместо двух вложенных prr - два нормальных метода? zoomInEnterFrameHandler и zoomOutEnterFrameHandler ?
или слишком много букоф печатать надо?

а ремувлистенер не работает потому что после выхода из ф-ции zoomOUT или zoomIN нет никакого prr - это локальная ф-ция.

И вообще: код в кадрах писать на надо.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 27.02.2010 в 11:12.
Старый 27.02.2010, 11:13
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 7  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
Котяра, так я же предлагал в обе функции prr вставить удаление листнера. так же нормлально?

Старый 27.02.2010, 11:49
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 8  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
zoomClip.zip
Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	/**
	 * ...
	 * @author k0t0vich
	 */
	public class ZoomedClip extends Sprite
	{
		private var xMax:int = 100;
		private var xMin:int = 50;
		private var zoomSpeed:Number = 2;
 
		public function ZoomedClip() 
		{
			super();
			addEventListener(MouseEvent.MOUSE_OUT, zoomOUT);
			addEventListener(MouseEvent.MOUSE_OVER, zoomIN);
		}
 
		private function zoomIN(e:MouseEvent):void 
		{
			stopZoom();
			addEventListener(Event.ENTER_FRAME, drawZoomIN); 
		}
 
		private function stopZoom():void
		{
			removeEventListener(Event.ENTER_FRAME, drawZoomIN); 
			removeEventListener(Event.ENTER_FRAME, drawZoomOUT);
 
		}
 
		private function drawZoomIN(e:Event):void 
		{
			if (width > xMin)
			{
					width -=zoomSpeed;		
					height -= zoomSpeed;
			}
			else
			{
				stopZoom();
			}
 
		}
 
 
		private function zoomOUT(e:MouseEvent):void 
		{
			stopZoom();
			addEventListener(Event.ENTER_FRAME, drawZoomOUT); 
		}
 
		private function drawZoomOUT(e:Event):void 
		{
			if (width < xMax)
			{
					width +=zoomSpeed;		
					height += zoomSpeed;
			}
			else
			{
				stopZoom();
			}
		}	
 
	}
 
}
__________________
Отряд Котовскага


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

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

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


 


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


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