Просмотр полной версии : кнопка на клавиатуре нажимает кнопку на сцене
veles2008
01.12.2009, 22:52
Приветствую!
Помогите пожалуйста с проблемой.
На сцене есть кнопка и объект. При нажатии на эту кнопку мышкой кнопка меняет цвет (через внутренний "Down") и объект выполняет какие то действия.
Как сделать чтобы при нажатии кнопки на клавиатуре (например кнопку "UP") нажималась кнопка на сцене?
через onKeyUp, в хелпе есть пример
veles2008
01.12.2009, 23:28
Такого примера я не вижу.
Ещё раз сокращённо:
Нужно чтобы кнопка на сцене нажималась и мышкой и кнопкой клавиатуры
Естественно, всех выкрутасов хелп не может предусмотреть, да и не должен, комбинировать нужно, программировать.
Пишите одну функцию, которая должна что-то делать, и назначаете ее исполнение на onKeyDown клавиши и onPress символа-кнопки:
function doIt () {
//действие
}
btn.onPress = doIt; //кнопка сцены - прижата, но не отпущена
var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = function() { //кнопка клавиатуры - - прижата, но не отпущена
if (Key.getCode() == Key.UP) { //ловит конкретно клавишу UP
doIt ();
}
};
Key.addListener(keyListener_obj);
veles2008
01.12.2009, 23:51
Большое спасибо.
А я там ещё спрашивал:
Когда нажимаем мышкой на кнопку срабатывает её внутренний "Down" . Это как то можно добавить?
И ещё в данном коде нажимаю на кнопку клавиатуры и действие выполняется пока не отпущу. А можно как то так чтоб нажал на кнопку клавиатуры и действие выполнилось 1 раз и если держать действие не повторялось, а повторилось только при повторном нажатии?
И ещё в данном коде нажимаю на кнопку клавиатуры и действие выполняется пока не отпущу. А можно как то так чтоб нажал на кнопку клавиатуры и действие выполнилось 1 раз и если держать действие не повторялось, а повторилось только при повторном нажатии?
Замените onKeyDown на onKeyUp, и вместо onPress поставьте onRelease - тогда на отпускание будет срабатывать и там и там.
Когда нажимаем мышкой на кнопку срабатывает её внутренний "Down" . Это как то можно добавить?
Надо поколдовать:
1. Заменяете кнопку-Button на кнопку - MovieClip, в нем два кадра: обычное и нажатое состояние. В каждом кадре (или только в первом) пропишите stop();
2. Вносите изменения в код, чтобы правильно анимировать кнопку через btn.gotoAndStop() на нужный кадр. Разберитесь там с событиями клавиатуры сами , поэкспериментируйте.
veles2008
02.12.2009, 00:07
ок. Спасибо
if (Key.getCode() == Key.UP && flag) { //ловит конкретно клавишу UP
flag = false;
...
}
Добавлено через 3 минуты
1. Заменяете кнопку-Button на кнопку - MovieClip, в нем два кадра: обычное и нажатое состояние.
Внимательно читаем хелп по AS2, поискав по кючевым словам "_up", "_over" или "_down".
Даже я нашел "Creating movie clips with button states".
veles2008
02.12.2009, 00:21
А можно
var keyListener_obj:Object = new Object();
как то подругому, а то всё хорошо, а действия происходят в геометрической прогрессии?
А можно
var keyListener_obj:Object = new Object();
как то подругому, а то всё хорошо, а действия происходят в геометрической прогрессии?
Вопрос не понятен.
См. пример (тестируйте исходник в среде разработки, там trace есть)
function doIt () {
//действие
trace('нажато!');
this.gotoAndStop(1);
}
btn.onPress = function () { //нажатие кнопки сцены
this.gotoAndStop(2);
}
btn.onRelease = doIt; //отпускание кнопки сцены
var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = function() {
if (Key.getCode() == Key.UP && !wasPressed) { //ловит нажатие UP
btn.gotoAndStop(2);
wasPressed = true ;
}
};
keyListener_obj.onKeyUp = function() {
if (Key.getCode() == Key.UP) { //ловит отпускание UP
doIt ();
btn.gotoAndStop(1);
wasPressed = false ;
}
};
Key.addListener(keyListener_obj);
veles2008
02.12.2009, 10:00
Вот мой код и исходник.
Если нажимать мышкой то увеличение координат и текст увеличивается на 1. Если клавиатурой то в прогрессии
speed=0;
hop=0;
onEnterFrame=function() {
drawing_mc.lineTo(bk._x, bk._y);
var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = function() {
if (Key.getCode() == Key.UP && !wasPressed) { //ловит нажатие UP
wasPressed = true ;
}
};
keyListener_obj.onKeyUp = function() {
if (Key.getCode() == Key.UP) { //ловит отпускание UP
doit1 ();
wasPressed = false ;
}
};
Key.addListener(keyListener_obj);
vperod.onRelease = doit1;
function doit1 () {
txt.text +="Вперёд" + "\n";
speed =20;
hop = hop + 1;
korx=hop;
}
bk._x+=speed*(Math.round(Math.sin(0.0175 * bk._rotation))); //увеличиваем координаты по _х в соответствии с углом поворота и скоростью; 0.0175 - это Пи/180 (перевод из градусной меры в радианную)
bk._y+=speed*(Math.round(-Math.cos(0.0175 * bk._rotation))); //увеличиваем координаты по _y в соответствии с углом поворота и скоростью
speed*=0;
}
Ну зачем вы все запихали в onEnterFrame, что за дикий код?
onEnterFrame выполняет все, что внутри нее с частотой, равной частоте кадров.
Разве есть необходимость с огромной скоростью непрерывно пересоздавать слушателей и переназначать функции onRelease, onKeyDown и onKeyUp, doit1?
Вытаскивайте все из onEnterFrame, оставляйте там только то, что реально нужно выполнять непрерывно, а все прочие функции выносите из нее.
Чего вы вообще пытаетесь добиться?
Chuck607
02.12.2009, 15:29
Объясните пожалуйста зачем нужен слушатель keyListener_obj? какова его функция ? Ведь без него тоже будет работать
Жень Шень
02.12.2009, 17:41
Без слушателя никуда! Но, вот лишний объект убрать можно - мувиклип слушает клаву и мышь изначально, как объект предопределенного класса.
function doIt() {
trace('нажато!');
this.gotoAndStop(1);
}
btn.onPress = function() {
this.gotoAndStop(2);
};
btn.onRelease = doIt;
btn.onKeyDown = function() {
if (Key.getCode() == Key.UP && !wasPressed) {
btn.gotoAndStop(2);
wasPressed = true;
}
};
btn.onKeyUp = function() {
if (Key.getCode() == Key.UP) {
doIt();
btn.gotoAndStop(1);
wasPressed = false;
}
};
Key.addListener(btn);
veles2008
02.12.2009, 22:32
спасибо mooncar!
Получилось? Пожалуйста...
veles2008
03.12.2009, 00:02
Получилось. Но на втором кадре нажатие клавиш сохраняется.
А за решение чтоб не сохранялись спасибо Жень Шень!
А как если действие при нажатии кнопки "1" или "2", "3" итд
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.