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

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

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

блогер
Регистрация: Dec 2005
Сообщений: 365
Записей в блоге: 6
По умолчанию В классе не срабатывает onMouseMove

Есть такой класс
Код:
import mx.utils.Delegate;

class Scroller extends MovieClip {
	
	public var slider_mc:MovieClip;
	public var sliderPath_mc:MovieClip;


	
	public function Scroller() {
		this.slider_mc.onPress = Delegate.create(this.slider_mc, onSliderPress);
		this.slider_mc.onRelease = Delegate.create(this.slider_mc, onSliderRelease);
		this.slider_mc.onReleaseOutside = Delegate.create(this.slider_mc, onSliderReleaseOutside);
	}
	
	public function onSliderPress() {
		this.startDrag(false, this._x, 0, this._x , this._parent.sliderPath_mc._height);
		this.onMouseMove = Delegate.create(this, dragProcess);
	}
	
	public function onSliderRelease() {
		this.stopDrag();

	}
	
	public function onSliderReleaseOutside() {
		onSliderRelease();
	}
	
	public function dragProcess() {
		trace("dragProcess");	
	}
	
	
	
}
Этот класс прописан у скроллера в Линкадже. slider_mc это ползунок скроллера. В итоге имеем, что trace("dragProcess"); не срабатывает! Что за дела - не ясно. Бился 5 часов над этим. Единственное, что обнаружил, это если this.onMouseMove = function() { trace("dragProcess"); } то так работает, но я так не хочу

Почему мой пример не работает?

Старый 25.01.2006, 22:16
ir73 вне форума Посмотреть профиль Отправить личное сообщение для ir73 Найти все сообщения от ir73
  № 2  
Ответить с цитированием
ir73
FD Team

блогер
Регистрация: Dec 2005
Сообщений: 365
Записей в блоге: 6
добавлю, что startDrag , stopDrag срабатывает на ура

Старый 25.01.2006, 23:19
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 3  
Ответить с цитированием
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
всё у тебя срабатывает.
только onSliderPress() срабатывает относительно this.slider_mc, где говорится "Delegate.create(this, dragProcess);" и this при этом равно this.slider_mc, где нет никакого dragProcess().

вообще, тут бестолку используется Delegate.

исправленный вариант:
Код:
import mx.utils.Delegate;
class Scroller extends MovieClip
{
	public var slider_mc:MovieClip;
	public var sliderPath_mc:MovieClip;
	public function Scroller()
	{
		this.slider_mc.onPress = onSliderPress;
		this.slider_mc.onRelease = onSliderRelease;
		this.slider_mc.onReleaseOutside = onSliderReleaseOutside;
	}
	public function onSliderPress()
	{
		this.startDrag(false, this._x, 0, this._x, this._parent.sliderPath_mc._height);
		this.onMouseMove = Delegate.create(this._parent, this._parent.dragProcess);
	}
	public function onSliderRelease()
	{
		this.stopDrag();
	}
	public function onSliderReleaseOutside()
	{
		onSliderRelease();
	}
	public function dragProcess()
	{
		trace("dragProcess");
	}
}
но такая реализация с точки зрения ооп АС2 всё равно плоха. для ползунка слайдера "по-правильному" надо сделать отдельный класс, где будет описано его поведение.

иначе получается, что ты пишешь в классе методы, у которых this будет относиться совсем к другому объекту. если класс не динамический и ты будешь использовать в этих методах какие-то нехарактерные для мувиклипа свойства, то компилятор будет ругаться (и будет прав).

Старый 25.01.2006, 23:41
ir73 вне форума Посмотреть профиль Отправить личное сообщение для ir73 Найти все сообщения от ir73
  № 4  
Ответить с цитированием
ir73
FD Team

блогер
Регистрация: Dec 2005
Сообщений: 365
Записей в блоге: 6
если палки. спасибо огромное.
Интересная вещь. А мне раньше казалось, что если пусть к методу не указать, то вызывается метод по дейолту в корне класса. Или я с чем спутал?

Старый 26.01.2006, 02:29
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 5  
Ответить с цитированием
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Метод вызывается для области видимости, указанной первым параметром

Старый 26.01.2006, 10:41
ir73 вне форума Посмотреть профиль Отправить личное сообщение для ir73 Найти все сообщения от ir73
  № 6  
Ответить с цитированием
ir73
FD Team

блогер
Регистрация: Dec 2005
Сообщений: 365
Записей в блоге: 6
это вы про Delegate говорте, а я имел в виду просто метод. напр. SomeFunc()

Старый 26.01.2006, 11:52
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 7  
Ответить с цитированием
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
если записать ссылку на метод в объект
и вызвать метод по этой ссылке из объекта,
то this на этот объект и будет указывать :)

по-моему вполне логично.
при этом не важно, где изначально находился метод...
к примеру, можно сделать так:

Цитата:
this.createTextField("TF", 0, 0,0,0,0);
TF.autoSize = true;
//
TF.swapDepths = this.swapDepths;
TF.swapDepths(123);
TF.text = TF.getDepth();


Последний раз редактировалось Nox Noctis; 26.01.2006 в 11:55.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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