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

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

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

Регистрация: Jul 2007
Сообщений: 80
По умолчанию взаимодействие классов

Вообщем я хотел создать отдельный класс в котором обралатываются движения мышки, пробывал его по разному делать, но не получается чото(туплю).
вот основной класс main_temp
Код:
package {
	import flash.display.*;
	import mouse_cursor;//вот класс для мышки 
	public class main_temp extends Sprite {
		var temp_mc:mouse_cursor//типо класс для мышки
		//constr
		public function main_temp( ) {
			temp_mc = new mouse_cursor()//типо вызов класса для мышки
			var rectAndCircle:Shape = new Shape( );
			rectAndCircle.graphics.lineStyle(1);
			rectAndCircle.graphics.beginFill(0x0000FF, 1);
			rectAndCircle.graphics.drawRect(125, 50, 150, 75);
			addChild(rectAndCircle);
		}
	}
}
вот класс мышки, на который очень ругается
Код:
package {
    import flash.display.Sprite;
	import flash.display.Shape;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;
    
    public class mouse_cursor extends Sprite {   
        public var cursor:Sprite = new Sprite();
        public function mouse_cursor() {
            cursor.graphics.beginFill(0xFF);
            cursor.graphics.drawRect(0, 0, 25, 25);
            stage.addChild(cursor);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, cursorFollow);
            Mouse.hide();
        }
        public function cursorFollow(evt:MouseEvent):void {
            cursor.x = stage.mouseX;
            cursor.y = stage.mouseY;
            evt.updateAfterEvent();
        }
    }
}

Старый 09.08.2008, 12:35
romantique вне форума Посмотреть профиль Отправить личное сообщение для romantique Найти все сообщения от romantique
  № 2  
Ответить с цитированием
romantique

Регистрация: Jul 2007
Сообщений: 44
А что говорит когда ругается?
Вообще stage доступен только после события Event.ADDED_TO_STAGE, так что в конструкторе указатель stage всё еще не определн. Попробуй так:
Код:
public function mouse_cursor
{
	addEventListener(Event.ADDED_TO_STAGE,onAddedToStage);
	...
}

private function onAddedToStage(e:Event):void
{
	// здесь stage уже доступен
	stage.addEventListener(...)
	stage. ...
	...
	removeEventListener(Event.ADDED_TO_STAGE,onAddedToSTage);
}
А вообще хорошие мальчики называют классы так: MouseCursor,
а не так:
mouse_cursor
__________________
hell no !

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

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Во-первых, Вы создаете экземпляр класса mouse_cursor, но не добавляете его в DisplayList, а пока он не добавлен, у него нет доступа к stage.

Во-вторых, даже если Вы добавите его в DisplayList,
Код:
addChild(temp_mc);
то в конструкторе класса mouse_cursor доступа к stage все равно не будет, нужно использовать событие ADDED_TO_STAGE.

В третьих, что за названия классов и почему с маленькой буквы?
Если уж называть по Вашему, то так: MainTemp, MouseCursor.


Последний раз редактировалось mre; 09.08.2008 в 12:41.
Старый 09.08.2008, 12:38
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 4  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
ну так там же написано, на что он ругается. у класса мыши в конструкторе нету свойства stage, потому что оно ещё не добавлено в display list. нужно слушать событие Event.ADDED_TO_STAGE

и ещё вы не добавляете создаваемые спрайты в display list, и именуете странно, и архитектура странная

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

Регистрация: Jul 2007
Сообщений: 80
та просто перехожу только на as3
ох и мутные эти события(раньше избегал их) , пасибо
а можно впросов ещё:
-для чего указывается входящий параметр?
Код:
private function onAddedToStage(e:Event):void
-а вообще лучше статичную функцию создать для добавления курсора мыши(а как)?
-почему stage виден только при событии ADDED_TO_STAGE, вот в основном классе я ето событие то не проверяю?

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

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Цитата:
> для чего указывается входящий параметр?
Чтобы в обработчике была информация о событии.
Цитата:
> а вообще лучше статичную функцию создать для добавления курсора мыши(а как)?
Что лучше использовать - зависит от конкретной задачи. (static)
Цитата:
> почему stage виден только при событии ADDED_TO_STAGE
Можете передать ссылку на него и будет "виден" сразу.
Цитата:
> вот в основном классе я ето событие то не проверяю
Но Вы то к нему и не обращаетесь.

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

Регистрация: Apr 2007
Адрес: Moscow city
Сообщений: 286
Отправить сообщение для ulik с помощью ICQ
2автор stage в классе mouse_cursor (переименуйте его, кстати, в MouseCursor) бдет доступен только после того, как экземпляр этого самого класса будет добавлен в displayList т.е. тогда, когда вы его добавите на методом addChild(...)
__________________
Дизайн, как презерватив - каждому жмет по-своему © Я
мое: блог форум

Старый 09.08.2008, 20:54
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 8  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Попробуйте так (почти работает [дергается])
Код:
//содержимое файла Мой_документ_класс_от_спрайта
package 
{ 
     import flash.display.*; 
     import flash.events.*; 
     import flash.events.*; 
     import flash.text.*;	 
     
     dynamic public class Мой_документ_класс_от_спрайта extends Sprite 
      {
        function Мой_документ_класс_от_спрайта()//конструктор
        {
        var моя_мышка = new MouseCursor(this);
        }
      }  
}
Код:
//MouseCursor
package {
    import flash.display.Sprite;
	import flash.display.Shape;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;
    
    public class MouseCursor extends Sprite {   
	function MouseCursor(мой_документ:Sprite)
       {
        //public var cursor:Sprite = new Sprite();//нафик не нужна т.к. это ж уже спрайт
            graphics.beginFill(0xFF);
            graphics.drawRect(0, 0, 25, 25);
            мой_документ.addChild(this);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, cursorFollow);
            Mouse.hide();
            mouseEnabled = false;
        }
        function cursorFollow(evt:MouseEvent):void {
             x = evt.localX;
             y = evt.localY;
            evt.updateAfterEvent();
        }
    }
}
http://www.dnadillo.dn.ua/fla/doc-sp...use-event.html


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

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

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


 


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


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