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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 25.10.2014, 19:23
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 11  
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Так Вам нужно?
Код AS3:
package{
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.display.Sprite;
    import flash.display.Shape;
 
    public class Main extends Sprite
    {
        private var _rect:Shape;
        private var _container:Sprite;
        private var _textField:TextField;
 
        public function Main( ){
            _container = new Sprite( );
            _container.addEventListener( MouseEvent.MOUSE_OVER, container_mouseOverHandler );
            _container.addEventListener( MouseEvent.MOUSE_OUT, container_mouseOutHandler );
            super.addChild( _container );
            _rect = new Shape( );
            _rect.graphics.beginFill( 0x232323 );
            _rect.graphics.drawRect( 0, 0, 70, 45 );
            _rect.graphics.endFill( );
            _rect.x = _rect.y = 100;
 
            _container.addChild( _rect );
 
            _textField = new TextField( );
            _textField.width = 150
            super.addChild( _textField );
 
        }
 
        private function container_mouseOverHandler( event: MouseEvent ):void
        {
            _textField.text = event.type as 
 
            _container.addEventListener( MouseEvent.MOUSE_MOVE, container_mouseMoveHandler );
        }
 
        private function container_mouseOutHandler( event: MouseEvent ):void
        {
            _textField.text = event.type as String;
 
            _container.removeEventListener( MouseEvent.MOUSE_MOVE, container_mouseMoveHandler );
        }
 
        private function container_mouseMoveHandler( event: MouseEvent ):void
        {
            _textField.text = String( event.type ) + '(' + String( event.stageX ) + ', ' + String( event.stageY ) + ' )';
        }
    }
}
bpKX.swf   (6.1 Кб)
Вложения
Тип файла: swf bpKX.swf (6.1 Кб, 107 просмотров)

Старый 25.10.2014, 23:41
Hobey вне форума Посмотреть профиль Отправить личное сообщение для Hobey Найти все сообщения от Hobey
  № 12  
Hobey

Регистрация: Oct 2014
Сообщений: 15
Цитата:
Так Вам нужно?
Что-то похоже, но не то.

Попытался снова вникнуть в это. Бегал из стороны в сторону и вообще запутался.
Вопросы:
1. Если написано так(выполнение одного метода!),
Код AS3:
object.addEventListener(MouseHover.MOUSE_HOVER, my_func);
то реально что функция "my_func" вызывается когда событие MOUSE_HOVER срабатывает? Событие срабатывает когда условие, вставленное в класс MouseHover, выполняется.
2. Если реально, то как в классе MouseHover получить ссылку на объект, для которого собственно это событие и было запущено.

Я был нацелен сделать событие, которое будет добавляться объекту в 1 строку, так же как это делается со встроенными классами. Пришел к выводу что это не реально. Запутался вообще. Развейте мои сомнения.

Везде в примерах событие добавляется внутри классов, где и обрабатывается его вызов.
Получается для добавления такого события код будет иметь такой вид:
Код AS3:
new MyEvent(obj)
.
Я так не хочу, это уже не то. Это уже не имеет особого смысла вообще.

Старый 26.10.2014, 00:18
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 13  
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Я всегда говорю то, что думаю и пусть даже иногда забегаю вперед и часто допускаю ошибки вызванные ложными
догадками и мне все равно... Но я теряюсь в словах при выборе на ответ Вам. Если коротко, то Вам пока рано делать
задуманное. Вам не недельку нужно flash погонять, Вам нужно всерьез подойти к делу и прочесть книгу Колин Мук as3.
Вопросов у Вас после этого не уменьшиться, но так Вы хотя бы встанете на верный путь.
Сказать вам, что мне не сложно это сделать и взять и сделать, я не могу. Простой пример можно сделать
за несколько минут, но потом вы скажете, а что-то у меня это событие с картинками неправильной формы и прозрачностью не работает и .... А чтобы не было ... Нужно потратить немало времени на геометрию и прочее.
Хотя если забить на производительность и все hitTest делать... Но я все равно не буду делать это.


И повторю ещё раз, то что Вы написали, говорит о том, что Вам нужно пересказать книгу, а потом ещё несколько месяцев учить Вас индивидуально, а это сами понимаете, никому не нужно, так как Вы не знаете самых-самых основ.

Старый 26.10.2014, 00:46
Hobey вне форума Посмотреть профиль Отправить личное сообщение для Hobey Найти все сообщения от Hobey
  № 14  
Hobey

Регистрация: Oct 2014
Сообщений: 15
Я понял. Но меня не интересует геометрия и рисунки, т.к. объекты это картинки. Но это ладно.
Пожалуйста, ответьте на вопрос №1.
Просто если это нереально, то я не буду мучиться с событиями, а сделаю по другому.
Не знание некоторых моментов не мешает мне делать сайт с хорошо организованной логикой кода.
На любые вопросы дает ответ справка. Но тут с событиями вообще каша. Но если ответ на вопрос под №1 - "нереально", то и каша превращается в тарелочку со вкусным мясом.

Старый 26.10.2014, 00:51
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 15  
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Реально. Только именно это и сделает из Вашего мозга месиво.
Вы либо забьете, либо на год в учение уйдете...

Добавлено через 40 секунд
Это конечно если Ваш первый вопрос считается
Цитата:
то реально что функция "my_func" вызывается когда событие MOUSE_HOVER срабатывает? Событие срабатывает когда условие, вставленное в класс MouseHover, выполняется.
Удачи!

Добавлено через 7 минут
И ещё один момент, Вы возможно неправильно что-то представляете.
Я раз видел человека идущего в через туман, как пройти сквозь бетонную стену?

Понимаете?

Старый 26.10.2014, 01:10
Hobey вне форума Посмотреть профиль Отправить личное сообщение для Hobey Найти все сообщения от Hobey
  № 16  
Hobey

Регистрация: Oct 2014
Сообщений: 15
Спасибо, я понял. Буду копать

Старый 26.10.2014, 11:22
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 17  
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Hobey, просто у Вас некоторый недостаток понимания самих концепций, как что работает вцелом, и этого Справочник не исправит, к сожалению.
В своих первых постах Вы хотели заставить флэш-плеер как приложение генерировать События по Вашим условиям. MouseEvent это события плеера, а не вашей программки. Эти события возникают как результат обработки плеером сообщений от периферийного устройства, поставляемых Системой.
Затем Вы спрашиваете, как в классе-хранителе константы получить ссылку на экземпляр класса (на object).
На самом деле нет никакой связи между этими предметами. MouseHover.MOUSE_HOVER это строка, хранящаяся в классе MouseHover в виде его свойства MOUSE_HOVER. Фактически, когда Вы добавляете объекту слушатель События, вы даже не сообщаете ему Класс этого события. Вы сообщаете только строку, слово, хранящееся в некой переменной или константе (допустим, это строка "mouseHover").
В частности, Вы с таким же успехом можете написать
Код AS3:
object.addEventListener("mouseHover", my_func);
— это абсолютно то же самое, и здесь, как видите, нет вообще никакого указания на класс MouseHover. Такого класса-хранителя константы вообще может не быть. Это всего-лишь способ хранения строки, не имеющий к событиям абсолютно никакого отношения. Здесь нужно передать параметром строку, и эта строка берется откуда-то, совершенно неважно откуда, хоть просто вписана "на месте". И если object продиспатчит событие ЛЮБОГО класса, при условии что в свойстве type этого события будет строка "mouseHover", то будет вызвана функция-обработчик my_func. И вот только с этого момента начинается проверка класса произошедшего События, потому что my_func() получает в качестве аргумента экземпляр класса-события (возможно, несущего какие-то нужные данные). Экземпляр вполне конкретного Класса, и функция my_func() обязана типизировать, Событие какого именно Класса она принимает в качестве аргумента. То есть, добавление слушателя работает всего-лишь со строкой, а вызов обработчика происходит уже с классом События.
Далее. Этот полученный my_func() экземпляр события обязательно содержит свойство currentTarget, в котором хранится ссылка на тот объект, которому непосредственно добавлялся слушатель, то есть в Вашем случае это object. Таким образом my_func() обязательно имеет ссылку на object и может с ним работать.
Но у Вас другая структура, хотя толком Вы ее не описываете, видимо считая это не важным. Насколько я понял, Вам нужно вызвать my_func(), когда 1) мышь над объектом + 2) соблюдается еще какое-то условие.
В таком случае Вам нужно подписать объект на событие "мышь над объектом" - MOUSE_OVER или ROLL_OVER, вызывая обработчиком не my_func(), а другую функцию. В этой функции Вы проверяете второе условие (ссылка на объект будет в экземпляре события класса MouseEvent), и если оно выполняется — вызываете my_func(), передавая ей, если нужно, какие-то параметры (ссылку на объект, например).
__________________
Reality.getBounds(this);

Старый 26.10.2014, 15:25
Hobey вне форума Посмотреть профиль Отправить личное сообщение для Hobey Найти все сообщения от Hobey
  № 18  
Hobey

Регистрация: Oct 2014
Сообщений: 15
Цитата:
И если object продиспатчит событие ЛЮБОГО класса, при условии что в свойстве type этого события будет строка "mouseHover", то будет вызвана функция-обработчик my_func
Да, я уже это понял.
Я раза 3 пытался спросить, возможно ли создать событие, которое будет вызываться как системное, т.е. в 1 строку. Получается что так сделать нельзя, и поэтому я не вижу смысла в пользовательских событиях.

Спасибо всем.

Старый 26.10.2014, 15:28
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 19  
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Вы опять не поняли, можно!))) В одну строчку, только оно не будет "системное", а будет "пользовательское"
и работать будет лишь на тех объектах, которые Вы специально сделает, а не на всем на чем Вам хочется.

Добавлено через 3 минуты
Ведь запись вида говорит о том, что объект object заранее подготовлен под событие.
Код AS3:
object.addEventListener("mouseHover", my_func);

Старый 26.10.2014, 16:25
Hobey вне форума Посмотреть профиль Отправить личное сообщение для Hobey Найти все сообщения от Hobey
  № 20  
Hobey

Регистрация: Oct 2014
Сообщений: 15
Цитата:
Ведь запись вида говорит о том, что объект object заранее подготовлен под событие.
Дак он подготовлен, но вызываться то событие не будет так. Надо еще вызвать функцию, в которой вызывается метод dispatchEvent. А это уже не то же самое что системные события

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

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

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


 


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


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