PDA

Просмотр полной версии : Привязка нажатие кнопки на клавиатуре к нажатию кнопки(button)


trion
27.07.2009, 20:27
Необходимо сделать так, чтобы при нажатии клавиатурной кнопки Esc и button выполнялось одно и тоже действие? Действие это весит на кнопки button.

NoCD
27.07.2009, 22:46
Вызывай общую функцию через клавиатуру и через кнопку.

trion
28.07.2009, 17:02
Вызывай общую функцию через клавиатуру и через кнопку.

Через кнопку функция у меня выглядет так:
Button.onPress=function()
{
bla-bla
}

А через клавиатуру, как сделать? Так?
on (keyPress "<Esc>",release)
{
bla-bla
}

Xero201
28.07.2009, 22:50
общая_функция(){код}
Нажатие_кнопки = общая_функция();
Нажатие_клавиши_Escape = общая_функция();

NoCD
29.07.2009, 07:31
общая_функция(){код}
Нажатие_кнопки = общая_функция();
Нажатие_клавиши_Escape = общая_функция();


Если я не ошибаюсь, то общая функция без скобок вызывается

Xero201
29.07.2009, 10:32
Если я не ошибаюсь, то общая функция без скобок вызывается
Да, это я поспешил(. Вы правы.
Раз лоханулся, то приведу уже и полный код
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);

aksios
29.07.2009, 10:55
myButton.onPress=function()
{ trace("onPress")
}
this.onEnterFrame = function() {
if (Key.isDown(Key.SPACE))
{ trace ("space")}}
*Для отладки вовсе не обязательно использовать функциональные кнопки типа ескейп, можно более скромный пробел.

mooncar
29.07.2009, 11:19
Действительно, для тестового режима 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, эскейп не отработается, так как эскейп сама программа будет перехватывать. Нужно запускать флешку отдельно.

aksios
29.07.2009, 11:36
Луноход, заготовка для доточки напильником?
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);

mooncar
29.07.2009, 11:40
Луноход, заготовка для доточки напильником?
Типа того, юмор оценил :)
Но здесь
myButton.onPress= function()
{
trace ("mouse button press");
share_function()
}

можно наверное, ограничится и ссылкой на функцию, а не вызывать ее. Автору же не нужно различать, что нажали, главное, чтобы действие одинаковое было....

trion
29.07.2009, 14:18
Автору - этот код будет работать в готовой флешке, а если тестировать через F12, эскейп не отработается, так как эскейп сама программа будет перехватывать. Нужно запускать флешку отдельно.

Ребят, что-то я наверно туплю. Или сделал нетак сейчас (или сразу неправильно начал делать). Вставил этот код, но проблема моя не устранилась.

Есть флешка на ней кнопка 1 и кнопка полноэкранный режим. Щелкаем на кнопку полноэкранный режим, переходим в полноэкранный режим. При этом кнопка 1 заменяется на кнопку 2 и тоже самое с кнопкой полноэкранного режима. Теперь когда щелкаем на кнопку выхода из полноэкранного режима, ролик выходит в нормальное исходное состояние, где кнопка 1 и кнопка полн. вид. А если щелкаем на клавиатурную кнопку Esc, то ролик выходит, но при этом кнопки не меняются.

Собственно поэтому и вопрос такой задал сначала.

Я не очень в AS разбираюсь, может это реализовать по другому как-то можно?

Прилагаю исходник. И надо, чтобы использовался только action scrpit 1.0.22652

mooncar
29.07.2009, 16:46
У меня ваш исходник не открывается (Unexpected file format).
Если судить по поведению swf-ки, у вас там где-то ошибка в логике, в коде, либо вы неправильно используете код, который мы вам написали. И вообще, я не знаю, есть в AS1 слушатели, или нет. Если нет, пишите через EnterFrame.

Добавлено через 2 минуты
Кстати, выход по esc, если вы опубликовали флешку на странице, у вас так и так будет, это заложено.

trion
29.07.2009, 16:53
Пересохранил исходник для flash CS3, посмотрите пожалуйста. Да выход по кнопке Esc он есть, только глюк с кнопкой срабатывает (не заменяется она, когда нажимаешь Esc):( , а по кнопке батон все работет нормально.

aksios
29.07.2009, 17:20
Там все нормально работает.

trion
29.07.2009, 17:35
Там все нормально работает.

Запускали html файл? Там косяк есть. Когда флешка находится в полноэкранном режиме. И нажимаешь клавиатурную кнопку Esc, то кнопка1 и кнопка полноэкранный вид - обратно не возвращаются в обычный режим.
Т.е. должно все время так:
Обычный режим - кнопка1 + кнопка полноэкранный режим
Полноэкранный режим - кнопка2 + кнопка выход из полноэкранного режима

В полноэкранном режиме и при нажатии клавиатурной кнопки Esc и кнопки выхода из полноэкранного режима должен всегда выходит в обычный режим с кнопкой1 и кнопкой полноэкранного режима.

А сейчас, в полноэкранном режиме при нажатии клавиатурной кнопки Esc появляется обычный режим + кнопка2 и кнопка выход из полноэкранного режима, а должно появляться кнопка1 + кнопка полноэкранный режим.

mooncar
29.07.2009, 17:42
Видимо, ESC отрабатывается 2 раза: один раз запрограммировано в коде, второй раз самой флешкой.
Посмотрите, я немного переработал:

mooncar
29.07.2009, 17:47
То есть, применительно к полноэкранному режиу вы не можнтн привязать одно и то же действие к кнопкам во флеше и клавиатурной - ESС отрабатывается флешкой независио от вашего кода, так что действия нужно немного разделить.

trion
29.07.2009, 18:12
Видимо, ESC отрабатывается 2 раза: один раз запрограммировано в коде, второй раз самой флешкой.
Посмотрите, я немного переработал:

Без публикации в сети ролик работает. Но если разместить на сайт, то все равно глюк не исчез. Запустите у себя 2.html посмотрите

mooncar
29.07.2009, 18:28
Да, есть такой казус. Пока ничего не могу сказать. Может быть, на AS2 перейти?

trion
29.07.2009, 18:49
Да, есть такой казус. Пока ничего не могу сказать. Может быть, на AS2 перейти?

Мне обязательно надо, чтобы применялся только AS1. Иначе все другое в ролике у меня не скомпилится, а переписать все на AS2 я не смогу (не умею просто).

trion
04.08.2009, 13:59
Почему-то когда ролик в полноэкранном режиме на сайте, то вообще клавиатурные кнопки не работают. Если заместо Esc прописать другие кнопки, то они реагировать в полноэкранном режиме не будут. (Только Esc, которая как-то прописана, так и не понял где это можно посмотреть). А так, если на сайт не заливать, то клавиатурную кнопку любую можно прописать и все работает.