Просмотр полной версии : Привязка нажатие кнопки на клавиатуре к нажатию кнопки(button)
Необходимо сделать так, чтобы при нажатии клавиатурной кнопки Esc и button выполнялось одно и тоже действие? Действие это весит на кнопки button.
Вызывай общую функцию через клавиатуру и через кнопку.
Вызывай общую функцию через клавиатуру и через кнопку.
Через кнопку функция у меня выглядет так:
Button.onPress=function()
{
bla-bla
}
А через клавиатуру, как сделать? Так?
on (keyPress "<Esc>",release)
{
bla-bla
}
общая_функция(){код}
Нажатие_кнопки = общая_функция();
Нажатие_клавиши_Escape = общая_функция();
общая_функция(){код}
Нажатие_кнопки = общая_функция();
Нажатие_клавиши_Escape = общая_функция();
Если я не ошибаюсь, то общая функция без скобок вызывается
Если я не ошибаюсь, то общая функция без скобок вызывается
Да, это я поспешил(. Вы правы.
Раз лоханулся, то приведу уже и полный код
function share_function(){
//code
}
Button_btn.onPress = share_function;
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
//When you use this example, be sure to select Control > Disable Keyboard Shortcuts in the test environment.
if (Key.isDown(Key.ESCAPE)) {
share_function();
//Key.removeListener(keyListener);
}
};
Key.addListener(keyListener);
myButton.onPress=function()
{ trace("onPress")
}
this.onEnterFrame = function() {
if (Key.isDown(Key.SPACE))
{ trace ("space")}}
*Для отладки вовсе не обязательно использовать функциональные кнопки типа ескейп, можно более скромный пробел.
Действительно, для тестового режима ESC не годится, но для окончательного
проекта вот рабочий вариант:
function share_function(){
//код общей функции
};
Button_btn.onPress = share_function;
Button_btn.onKeyDown = function() {
if (Key.isDown(Key.ESCAPE)) {
share_function();
}
};
Key.addListener(Button_btn);
ИМХО, функция на onEnterFrame будет зависеть от частоты кадров, нажатие на клавишу может не пойматься. Например, даже на частоте кадров 12 не всегда отлавливается. Лучше все-таки слушателя использовать.
Недавно опытные люди посоветовали не плодить лишних мусорных листенеров, поэтому функцию слушателя нажатия на клавиатурную кнопку ESC здесь выполняет сама флешевская кнопка: Key.addListener(Button_btn).
Автору - этот код будет работать в готовой флешке, а если тестировать через F12, эскейп не отработается, так как эскейп сама программа будет перехватывать. Нужно запускать флешку отдельно.
Луноход, заготовка для доточки напильником?
function share_function(){
//код общей функции
trace("main function")
};
myButton.onPress= function()
{
trace ("mouse button press");
share_function()
}
myButton.onKeyDown = function() {
if (Key.isDown(Key.SPACE)) {
share_function();
trace ("key down")
}
};
Key.addListener(myButton);
Луноход, заготовка для доточки напильником?
Типа того, юмор оценил :)
Но здесь
myButton.onPress= function()
{
trace ("mouse button press");
share_function()
}
можно наверное, ограничится и ссылкой на функцию, а не вызывать ее. Автору же не нужно различать, что нажали, главное, чтобы действие одинаковое было....
Автору - этот код будет работать в готовой флешке, а если тестировать через F12, эскейп не отработается, так как эскейп сама программа будет перехватывать. Нужно запускать флешку отдельно.
Ребят, что-то я наверно туплю. Или сделал нетак сейчас (или сразу неправильно начал делать). Вставил этот код, но проблема моя не устранилась.
Есть флешка на ней кнопка 1 и кнопка полноэкранный режим. Щелкаем на кнопку полноэкранный режим, переходим в полноэкранный режим. При этом кнопка 1 заменяется на кнопку 2 и тоже самое с кнопкой полноэкранного режима. Теперь когда щелкаем на кнопку выхода из полноэкранного режима, ролик выходит в нормальное исходное состояние, где кнопка 1 и кнопка полн. вид. А если щелкаем на клавиатурную кнопку Esc, то ролик выходит, но при этом кнопки не меняются.
Собственно поэтому и вопрос такой задал сначала.
Я не очень в AS разбираюсь, может это реализовать по другому как-то можно?
Прилагаю исходник. И надо, чтобы использовался только action scrpit 1.0.22652
У меня ваш исходник не открывается (Unexpected file format).
Если судить по поведению swf-ки, у вас там где-то ошибка в логике, в коде, либо вы неправильно используете код, который мы вам написали. И вообще, я не знаю, есть в AS1 слушатели, или нет. Если нет, пишите через EnterFrame.
Добавлено через 2 минуты
Кстати, выход по esc, если вы опубликовали флешку на странице, у вас так и так будет, это заложено.
Пересохранил исходник для flash CS3, посмотрите пожалуйста. Да выход по кнопке Esc он есть, только глюк с кнопкой срабатывает (не заменяется она, когда нажимаешь Esc):( , а по кнопке батон все работет нормально.
Там все нормально работает.
Там все нормально работает.
Запускали html файл? Там косяк есть. Когда флешка находится в полноэкранном режиме. И нажимаешь клавиатурную кнопку Esc, то кнопка1 и кнопка полноэкранный вид - обратно не возвращаются в обычный режим.
Т.е. должно все время так:
Обычный режим - кнопка1 + кнопка полноэкранный режим
Полноэкранный режим - кнопка2 + кнопка выход из полноэкранного режима
В полноэкранном режиме и при нажатии клавиатурной кнопки Esc и кнопки выхода из полноэкранного режима должен всегда выходит в обычный режим с кнопкой1 и кнопкой полноэкранного режима.
А сейчас, в полноэкранном режиме при нажатии клавиатурной кнопки Esc появляется обычный режим + кнопка2 и кнопка выход из полноэкранного режима, а должно появляться кнопка1 + кнопка полноэкранный режим.
Видимо, ESC отрабатывается 2 раза: один раз запрограммировано в коде, второй раз самой флешкой.
Посмотрите, я немного переработал:
То есть, применительно к полноэкранному режиу вы не можнтн привязать одно и то же действие к кнопкам во флеше и клавиатурной - ESС отрабатывается флешкой независио от вашего кода, так что действия нужно немного разделить.
Видимо, ESC отрабатывается 2 раза: один раз запрограммировано в коде, второй раз самой флешкой.
Посмотрите, я немного переработал:
Без публикации в сети ролик работает. Но если разместить на сайт, то все равно глюк не исчез. Запустите у себя 2.html посмотрите
Да, есть такой казус. Пока ничего не могу сказать. Может быть, на AS2 перейти?
Да, есть такой казус. Пока ничего не могу сказать. Может быть, на AS2 перейти?
Мне обязательно надо, чтобы применялся только AS1. Иначе все другое в ролике у меня не скомпилится, а переписать все на AS2 я не смогу (не умею просто).
Почему-то когда ролик в полноэкранном режиме на сайте, то вообще клавиатурные кнопки не работают. Если заместо Esc прописать другие кнопки, то они реагировать в полноэкранном режиме не будут. (Только Esc, которая как-то прописана, так и не понял где это можно посмотреть). А так, если на сайт не заливать, то клавиатурную кнопку любую можно прописать и все работает.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.