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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

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

Регистрация: Jul 2002
Адрес: Днепропетровск, Украина
Сообщений: 7
По умолчанию Button, on() and this

Прошу прощения, если вопрос этот уже задавался и обсуждался, поиск я уже успел просмотреть, но прямого ответа не нашел.

В AS Reference написано, что когда для бутона вызывается on(), то this внутри вызова ссылается на текущую сцену. Можно ли как-то, без хардкодового обращения к названию инстанса кнопки, все таки обратиться к ее параметрам?

Конкретней, я пытаюсь в кнопке btnStop сделать хинт на hover, и пишу такое:

on(rollOver) {
createTextField("txtHint",1, this._x+10, this._y+10, 0, 0);
txtHint.autoSize = true;
txtHint.text = " Press to Stop ";
}

Но вот this._x и this._y возвращают х и у для сцены, т.е. нули. Можно ли как-то добраться до х и у кнопки, без написания btnStop._x и btnStop._y? Не хотелось бы это делать, плохая практика кодирования, а меня это беспокоит в разработке флеш-приложений (я только начал в нем разбираться, но исследую возможность создания серьезных вещей, которые легко тестить и модифицировать).

Заранее благодарен за ответ.

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

Регистрация: Aug 2001
Сообщений: 4,121
можно например снаружи написать

btnStop.onRollOver = function () {
createTextField("txtHint",1, this._x+10, this._y+10, 0, 0);
txtHint.autoSize = true;
txtHint.text = " Press to Stop ";
}

тогда роллОверная функция будет методом и this будет указывать куда надо...


Последний раз редактировалось Nox Noctis; 23.07.2002 в 15:00.
Старый 23.07.2002, 15:06
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 3  
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
Noooooooox!!!!!

Я даже запостить не успел.
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 23.07.2002, 15:10
Notna вне форума Посмотреть профиль Отправить личное сообщение для Notna Найти все сообщения от Notna
  № 4  
Notna

Регистрация: Jul 2002
Адрес: Днепропетровск, Украина
Сообщений: 7
Спасибо обоим, огромное

А "снаружи" - это где? Мне надо еще время, чтобы въехать в структуру кода. Вариант, который кажется наиболее вероятным - "Actions for Frame 1 of Layer Name Layer 1". Так?



Update: Попробовал, заработало!!! Действительно так и надо? В данном случае у меня одна сцена, один лейер и один кадр (вся жизнь происходит за счет программной анимации ходячего человечка вправо и влево). В более сложных случаях обработчики событий надо навешивать в первом кадре той сцены и того лейера, в который эти объекты положены (или, если создаются динамически, то в том же коде, где они и создаются), да?


Последний раз редактировалось Notna; 23.07.2002 в 15:15.
Старый 23.07.2002, 15:16
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 5  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
DeliMIter, спокойно, все хорошо убери руку с затвора и верни предохранитель на место

2Notna
"снаружи" - это в любом скрипте таймлайна, в котором у тебя лежит этот символ с кнопкой...
...номер кадра и название лэйера не имеют никакого значения - главное:
— определить функцию ДО того, как она может быть использована
— в кадре с этим скриптом кнопка для которой мы это пишем должна присутствовать


Последний раз редактировалось Nox Noctis; 23.07.2002 в 15:19.
Старый 23.07.2002, 15:29
Notna вне форума Посмотреть профиль Отправить личное сообщение для Notna Найти все сообщения от Notna
  № 6  
Notna

Регистрация: Jul 2002
Адрес: Днепропетровск, Украина
Сообщений: 7
А кадр - это один лейер или все видимые в данный момент лейеры?

И еще, расхрабрюсь почувствовав реальную помощь, можно ли объявить function showHint(txt) и hideHint(), а потом написать:

btnLeft.onRollOver = showHint("Go left");
btnRight.onRollOver = showHint("Go right");

и т.п. (ну, и с onRollOut тоже)? Я сделал, но почему-то функции showHint и hideHint вызываются в момент назначения события (трейсом проверил), а по самим событиям не вызываются

--
Вообще, чувствую, надо мне создать класс btnWithHint, в котором хранить текст хинта, и мувик картинки (бутоны не текстом разнятся, а видом), и самому по этому мувику двигаться по разным событиям, а потом создать каждую кнопку как объект этого класса. Надо попробовать.


Последний раз редактировалось Notna; 23.07.2002 в 15:35.
Старый 23.07.2002, 15:41
Notna вне форума Посмотреть профиль Отправить личное сообщение для Notna Найти все сообщения от Notna
  № 7  
Notna

Регистрация: Jul 2002
Адрес: Днепропетровск, Украина
Сообщений: 7
Получилось вот так:

function showHint(txt,btn) { ... }

btnLeft.onRollOver = function() {
showHint("Go left", this);
}

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

Регистрация: Aug 2001
Сообщений: 4,121
> А кадр - это один лейер или все видимые в данный момент лейеры?
есть таймлайн. (цепочка кадров)
слои в таймлайне нужны по большому счету только для удобства редактирования.
все слои одного таймлайна проигрываются синхронно.

> btnLeft.onRollOver = showHint("Go left");
> btnRight.onRollOver = showHint("Go right");
получается, что ты свойствам onRollOver и onRollOver объекта btnRight присваиваешь результат выполнения функций, а НЕ ссылки на функции

...а с классом попробуй может быть будет удобнее

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

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

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


 


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


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