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

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

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

Регистрация: Sep 2007
Адрес: 52° 31′ N, 13° 24′ O
Сообщений: 55
По умолчанию как сделать Слушатель на колесо мыши?

Привет!
Есть код - горизонтальный скролл. Подскажите, пожалуйста, как делать прокрутку с помощью колеса мыши!


Последний раз редактировалось Stanislavsky; 29.01.2010 в 23:26. Причина: Запостил ниже.
Старый 29.01.2010, 19:20
AS3Coder вне форума Посмотреть профиль Отправить личное сообщение для AS3Coder Найти все сообщения от AS3Coder
  № 2  
Ответить с цитированием
AS3Coder
 
Аватар для AS3Coder

Регистрация: Oct 2009
Адрес: г. Казань
Сообщений: 82
Смотрите MouseEvent.MOUSE_WHEEL

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

Регистрация: Sep 2007
Адрес: 52° 31′ N, 13° 24′ O
Сообщений: 55
Кто посмотрит? Что то не правильно у меня?
Код AS3:
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	//Импорт TweenMax и plugin для blur filter
	import com.greensock.TweenMax;
 
	public class GalleryClass extends MovieClip
	{
		var scrollMC:Hand;
		var myContent:Content;
		var myMask:Maska;
		var scrolling:Boolean = false;
		//Создадим прямоугольник, который будет действовать как ограничитель для scrollMC.
		//Это способ, при помощи которого scrollMC можно перетаскивать только вдоль линии.
		var bounds:Rectangle = new Rectangle(scrollMC.x, scrollMC.y, 700, 0);
		//Мы хотим знать, какая была предыдущая x-координата для контента (для анимации)
		var oldX:Number = myContent.x;
		//Запомним длину контента и маски.
		var CONTENT_WIDTH:Number = 4000;
		var MASK_WIDTH:Number = 408;
 
 
		public function GalleryClass() : void         
		{             
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
 
		public function init(event:Event = null) : void         
		{
			scrollMC = new Hand();
			addChild(scrollMC);
			scrollMC.x = 35;
			scrollMC.y = 54;
 
			myMask = new Maska();
			addChild(myMask);
			myMask.x = 20;
			myMask.y = 90;
 
 
			//Располагаем контент в левом верхнем углу маски
			myContent = new Content();
			addChild(myContent);
			myContent.x = myMask.x;
			myContent.y = myMask.y;
 
			//Установим маску для нашего контента
			myContent.mask = myMask;
 
 
			//Мы хотим знать, когда пользователь скроллирует
			var scrolling:Boolean = false;
			//Слушаем, когда пользователь нажимает мышь на scrollMC
			scrollMC.addEventListener(MouseEvent.MOUSE_DOWN, startScroll);
			//Слушаем когда пользователь вращает колесико мыши
			stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);			
			//Слушаем, когда пользователь отпускает кнопку мыши
			stage.addEventListener(MouseEvent.MOUSE_UP, stopScroll);
			//Добавим ENTER_FRAME чтобы анимировать скроллирование
			addEventListener(Event.ENTER_FRAME, enterHandler);
		}
		//Эта функция вызывается, когда пользователь перетаскивает scrollMC
		private function startScroll (event:Event):void 
		{
			//Установим scrolling равным true
			scrolling = true;
 
			//Начинаем перетаскивать scrollMC 
			scrollMC.startDrag(false,bounds);
 
		}
 
		//Эта функция вызывается, когда пользователь заканчивает перетаскивание scrollMC
		private function stopScroll(event:Event):void 
		{
			//Установим scrolling равным false
			scrolling = false;
 
			//Остановим перетаскивание
			scrollMC.stopDrag();
		}
		//Эта функция выполняется в каждом фрейме
		private function enterHandler(event:Event):void 
		{
			//Проверяем, происходит ли скроллирование
			if (scrolling == true) 
			{
				//Вычисляем расстояние scrollMC от левого края
				var distance:Number = Math.round(scrollMC.x - bounds.x);
 
				//Вычисляем процентное содержание расстояния по отношению к длине линии.
				//Итак, когда scrollMC слева, percentage равно 0 ,
				// а когда справа - percentage равно 1.
				var percentage:Number = distance / MASK_WIDTH;
 
				//Сохраним старую x - координату
				oldX = myContent.x;
 
				//Вычисляем новую x -координату (targetX) для контента.
				//Мы вычитаем длину маски из длины контента.
				//Таким образом, контент должен двигаться влево, когда мы прокручиваем вправо.
				//Удалите вычитание, чтобы убедиться лично!
				var targetX:Number = -((CONTENT_WIDTH - MASK_WIDTH) * percentage) + myMask.x;
 
				//Мы хотим анимировать скроллирование только если старый х отличается от нового х.
				//В нашем мувике мы анимируем прокрутку, если разница больше чем 5 пикселов.
				if (Math.abs(oldX - targetX) > 5) 
				{
					//Твин контента на новую позицию.
					//Вызываем функцию tweenFinished() когда твин завершится.
					TweenMax.to(myContent, 2, {x: targetX, blurFilter:{blurX:0, blurY:0}, onComplete: tweenFinished});
					}
				}
		}
 
		//Эта функция вызывается, когда твин завершается
		private function tweenFinished():void 
		{
			//твин для возврата контента к нормальному состоянию (= удалим blur)
			TweenMax.to(myContent, 0.3, {blurFilter:{blurX:0, blurY:0}});
		}
 
 
		function mouseWheelHandler(event:MouseEvent):void 
		{
			if ((event.delta < 0 && scrollMC.x > bounds.x) ||
			(event.delta > 0 && scrollMC.x < bounds.x + bounds.width))
			{
			scrolling = true;
			scrollMC.x = scrollMC.x + (event.delta * 9);
			}
		}
	}
}
Добавлено через 6 часов 58 минут
ОШИБКА 1009!!! Что неправильно? Где же Вы специалисты?


Последний раз редактировалось Stanislavsky; 30.01.2010 в 02:17.
Старый 30.01.2010, 02:35
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,739
Записей в блоге: 11
А текст ошибки все должны не память помнить?

Старый 30.01.2010, 04:16
Stanislavsky вне форума Посмотреть профиль Отправить личное сообщение для Stanislavsky Найти все сообщения от Stanislavsky
  № 5  
Ответить с цитированием
Stanislavsky
 
Аватар для Stanislavsky

Регистрация: Sep 2007
Адрес: 52° 31′ N, 13° 24′ O
Сообщений: 55
Извиняюсь.
"Невозможно получить доступ к свойству или методу пустой ссылки на объект. "
Объект, результатом которого является null, не может иметь свойств. Эта ошибка может возникнуть в некоторых неожиданных (однако допустимых) ситуациях. Возьмем для примера следующий код создания объекта Sprite. Так как этот объект Sprite никогда не добавляется в список отображения (с использованием метода addChild() объекта DisplayObjectContainer), его свойство stage принимает значение null. Таким образом, выполнение данного кода приводит к ошибке, так как свойство stage объекта Sprite не может обладать какими-либо свойствами:
import flash.display.Sprite;
var sprite1:Sprite = new Sprite();
var q:String = sprite1.stage.quality;

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,739
Записей в блоге: 11
1. Запустите флешку в дебаг режиме, что бы узнать строку в которой происходит ошибка.
2. В конструкторе все равно не может быть stage, оставьте:
Код AS3:
public function GalleryClass() : void         
{
	addEventListener(Event.ADDED_TO_STAGE, init);
}
Добавлено через 3 минуты
3. Зачем вам слушать ENTER_FRAME если вы используете твинер?В данном случае вместо ENTER_FRAME можно исмользовать MOUSE_MOVE. И слушатель лучше добавлять в обработчике MOUSE_DOWN и убирать в обработчике MOUSE_UP (MOUSE_UP тоже добавлять в MOUSE_DOWN и удалять в своем обработчике), зачем им висеть когда они не нужны?


Последний раз редактировалось alatar; 30.01.2010 в 05:20.
Старый 31.01.2010, 03:30
dj_Kayot вне форума Посмотреть профиль Отправить личное сообщение для dj_Kayot Найти все сообщения от dj_Kayot
  № 7  
Ответить с цитированием
dj_Kayot

Регистрация: Nov 2009
Сообщений: 11
вопрос. а можно-ли как то узнать в какую сторону крутится скрол??

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,059
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
открываем хелп и видим
Цитата:
delta
delta:int [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения: 1.0 9

Показывает расстояние прокрутки в строках на единицу вращения колесика мыши. Положительное значение delta показывает прокручивание вверх, отрицательное значение показывает прокрутку вниз. Как правило, используются значения в пределах 1-3, но более быстром прокручивании это число увеличивается. Этот параметр от устройства и операционной системы, как правило оно может настраиваться пользователем. Это свойство применяется только к событию MouseEvent.mouseWheel.

Старый 31.01.2010, 11:32
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Новосибирск :D
Сообщений: 6,558
Записей в блоге: 17
Цитата:
В конструкторе все равно не может быть stage
Может, если это базовый класс.

Старый 31.01.2010, 13:32
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 10  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
о_О..а может если он не добавлен на сцену? )
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

Теги
scroll , колесо мыши , скроллинг
Опции темы
Опции просмотра

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

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


 


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


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