Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   объединение функций кнопки и клавиши (http://www.flasher.ru/forum/showthread.php?t=128960)

Wlspartak 21.08.2009 11:58

объединение функций кнопки и клавиши
 
Как можно сделать, чтоб выполнялось действие, либо при нажатии кнопки, либо клавиши?
Код AS1/AS2:

Key.isDown(Key.ENTER) = enter_btn.onPress = function() {действие
}

Не получается.

Wolsh 21.08.2009 12:50

Опишите действие в отдельной функции и вызывайте ее при нажатии на кнопку или на клавишу.

incorp 21.08.2009 13:01

я бы сделал так:
Код AS1/AS2:

var keyListener:Object = new Object();
Key.addListener(keyListener);
 
keyListener.onKeyDown = enter_btn.onPress = function()
{
if(Key.getCode()==13||Key.getCode()==0){действие}
};

да, и не забудте что при тестировании через кс у вас работать адекватно не будет, шоткаты клавы не позволят.

Добавлено через 11 минут
хотя, я тут немного подумал, говорят это полезно:) так будет работать не совсем верно. верно так:
Код AS1/AS2:

var keyListener:Object = new Object();
Key.addListener(keyListener);
 
keyListener.onKeyDown = enter_btn.onPress = function()
{
if(Key.getCode()==13||this._name=='enter_btn'){_root.t.text+=Key.getCode()}
};


Wolsh 21.08.2009 13:40

Код AS1/AS2:

var keyListener:Object = new Object();
Key.addListener(keyListener);
////
keyListener.onKeyDown = function():Void
{
        trace("Down");
        if(Key.isDown(Key.ENTER))
        {
                action();
        }
}
enter_btn.onPress = action;
function action():Void
{
        trace("Enter");
}


Wlspartak 21.08.2009 14:16

Что-то не получается. Вот пример:(проверка пароля)
Пишу общую функцию:
Код AS1/AS2:

function my_func() {
        if (parole == "Vega") {
                gotoAndStop("Фильм", 1);
        } else {
                gotoAndStop("Ошибка", 1);
        }
}

Как ее вызвать кнопкой либо клавишей ENTER?
P.S.
Получилось так:
Код AS1/AS2:

stop();
var keyListener:Object = new Object();
Key.addListener(keyListener);
 
keyListener.onKeyDown = enter_btn.onPress = function()
{
if(Key.getCode()==13||this._name=='enter_btn'){if (parole == "Vega") {
                gotoAndStop("Фильм", 1);
        } else {
                gotoAndStop("Ошибка", 1);
        }
}
}

Всем спасибо за помощь.

Wolsh 21.08.2009 14:56

Код AS1/AS2:

var keyListener:Object = new Object();
Key.addListener(keyListener);
////
keyListener.onKeyDown = function():Void
{
        if(Key.isDown(Key.ENTER))
        {
                my_func();
        }
}
enter_btn.onPress = my_func;

Добавлено через 1 минуту
И да, в my_func надо поменять область видимости, дописав _root к ссылкам на переменные. Или использовать диспатчер.

Добавлено через 3 минуты
Т.е. _root.parole и _root.gotoAndStop();

Wlspartak 21.08.2009 15:08

Спасибо, тоже работает. А почему в последней строке
Код AS1/AS2:

my_func;

без скобок?

Wolsh 21.08.2009 15:30

Когда Вы пишете a = b, вы же не ставите скобки? В данном случае вы пишете "функция а = функция б". Зачем ее вызывать? Она будет вызвана при нажатии. А если поставите скобки - то будет вызвана сразу. Засуньте туда трейс и проверьте - трейс выведется сразу при запуске флэшки, если Вы поставите скобки. Потому что это будет значить "функция а = результат выполнения функции б", и ф-ия б должна быть выполнена сразу, чтобы получить равенство. Как в случае с
Код AS1/AS2:

var max:Number = Math.max(2, 6);

Вы же сразу получаете результат, который и записывается в переменную max? Потому что ф-ия Math.max() была сразу вызвана. Так и здесь.

Добавлено через 16 минут
onPress это переменная, хранящая ссылку на функцию. Когда Вы пишете
Код AS1/AS2:

mc.onPress = function(){}

Вы просто присваиваете этой переменной значение - БЕЗЫМЯННУЮ ф-ию. Скобки здесь - не вызов этой ф-ии, а коллектор параметров, которые она принимает, за ним следует тело ф-ии {}. То есть это просто другой случай в плане синтаксиса. function() - вызов, function(){} - cоздание.

Wlspartak 21.08.2009 16:11

Еще раз спасибо за разъяснениие.
Цитата:

Засуньте туда трейс и проверьте
Я без трейса убедился, что получится результат выполнения функции (я в начале и делал со скобками), и не мог понять, почему так происходит.

Жень Шень 21.08.2009 16:18

Цитата:

Сообщение от Wolsh (Сообщение 844468)
onPress это переменная, хранящая ссылку на функцию.

Чуть поправлю гуру.
onPress - это обработчик события, который выполнит событие по ссылке, к которой он приравнен. А function() - это собственно сама фунция, но об этом уже сказано.


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

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