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

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

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

Регистрация: May 2008
Сообщений: 102
По умолчанию Проблема смены "кастомного" курсора

код класса курсора:
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.ui.Mouse;
 
	public class AdvancedCursor extends MovieClip {
 
		public function AdvancedCursor() {
			super();
 
			setState(1);
			Mouse.hide();
			getChildAt(0).x = mouseX;
			getChildAt(0).y = mouseY;
 
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
 
		public function onEnterFrame(event:Event) {
			getChildAt(0).x = mouseX;
			getChildAt(0).y = mouseY;
		}
 
		public function setState(_state:int):void
		{
			gotoAndStop(_state);
		}
 
		public function getState():Number
		{
			return currentFrame;
		}
	}
}
по сути это мувиклип с несколькими кадрами на которые переход осуществляется
Если не вызывать никогда setState - все прекрасно работает - курсор замещен

НО - мне нужно менять курсор - и когда я вызываю setState - курсор-то меняется, но при смене курсор куда-то пропадает, при этом мелькает в левом верхнем углу, а в output выводится сообщение что в getChildAt(0) - ничего нет - null, поэтому ошибка при смене координат.

Через мгновение все нормально - курсор меняется но как избавится от этого мигания и "исчезновения" объекта при смене кадра?


Последний раз редактировалось ekeeper; 23.06.2009 в 13:46.
Старый 23.06.2009, 13:54
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS3:
public function onEnterFrame(event:Event) {
	super.x = super.parent.mouseX;
	super.y = super.parent.mouseY;
}
А может лучше на MouseEvent.MOUSE_MOVE повесить обновление координат?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 23.06.2009, 14:03
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 3  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Цитата:
Сообщение от dimarik Посмотреть сообщение
Код AS3:
public function onEnterFrame(event:Event) {
	super.x = super.parent.mouseX;
	super.y = super.parent.mouseY;
}
А может лучше на MouseEvent.MOUSE_MOVE повесить обновление координат?
Событие сменил

но на строчку кода "super.parent.mouseX" или "super.parent.mouseY"
ругается: "TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"."

Старый 23.06.2009, 14:09
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
так попробуйте. нету парента еще. а лучше. наверное, к stage обращаться
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.ui.Mouse;
 
	public class AdvancedCursor extends MovieClip {
 
		public function AdvancedCursor() {
			super();
			Mouse.hide();
			super.addEventListener(Event.ADDED_TO_STAGE, this.handler_addedToStage);
			this.setState(1);
		}
 
		//-----------------------------
		//  state
		//-----------------------------	
 
		public function set state(value:uint):void {
			if (value == super.currentFrame || value < 1 || value > super.totalFrames ) return;
			super.gotoAndStop(value);
		}
 
		public function get state():uint {
			return super.currentFrame;
		}
 
		//---------------------------------------------------------------------
		//
		//    Events handlers
		//
		//---------------------------------------------------------------------
 
		private function handler_addedToStage(event:Event):void {
			super.addEventListener(MouseEvent.MOUSE_MOVE, this.handler_mouseMove);
		}
 
		private function handler_removedToStage(event:Event):void {
			super.removeEventListener(MouseEvent.MOUSE_MOVE, this.handler_mouseMove);
		}
 
		private function handler_mouseMove(event:Event):void {
			super.x = super.stage.mouseX;
			super.y = super.stage.mouseY;
		}
 
	}
}
Работоспособность кода не проверял. может содержать синтаксические ошибки
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 23.06.2009, 14:19
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 5  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
да, код не работает. мувик курсора бьется в левом верхнем углу и в цикле все кадры проигрываются

Добавлено через 4 минуты
подправил ошибки, теперь все работает. Но событие пришлось вернуть на Enterframe - ибо если сильно дернуть мышкой, то для мувиклипа MouseMove уже не выполняется

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
так может стоит маусмув повесить на стейдж?

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
конечно надо чтобы сама картинка курсора была в библиотеке, а определение нового курсора шло в главном классе. Помоему куча пример есть на AS3

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

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

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


 


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


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