Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему не работает условие event.keyCode == Keyboard.ENTER (http://www.flasher.ru/forum/showthread.php?t=152957)

Владимир 25.03.2011 15:55

Почему не работает условие event.keyCode == Keyboard.ENTER
 
Adobe Professional CS5 (11.0.0.485), AS3, Flash Player 11. Изучаю вообщем ActionScript.

Выполняю пример из руководства http://help.adobe.com/ru_RU/ActionSc...rogramming.pdf
страница 30-38, три раза всё удалял и делал заного...

Там решенный пример, который у меня почему то неработает. По заданию нужно в текстовое поле textIn набрать имя, нажать ENTER, скрипт сверяет это имя со списком имен из массива validNames. Если имя подходит, тогда в текстовое поле mainText пишется сообщение "Hello [name]".

свойства textIn - тип редактируемый, т.е. InputText в английской версии, и ещё во вкладке "контейнер и поток" поведение: однострочный ставлю (как в англ. версии я хз).

Загвостка в том, что по нажатию ENTER ничего не происходит.

код HelloWorld.fla (действие - первого кадра):
Код AS3:

import flash.ui.Keyboard;
 
var myGreeter:Greeter = new Greeter();
mainText.text = myGreeter.sayHello("");
 
mainText.border=true;
textIn.border = true;
 
textIn.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
 
function keyPressed(event:KeyboardEvent):void
{
        if (event.keyCode == Keyboard.ENTER)
        {
                mainText.text = myGreeter.sayHello(textIn.text);
        }
}

код Greeter.as:
Код AS3:

package
{
        public class Greeter
        {
                public static var validNames:Array = ["Sammy", "Frank", "Vova"];
 
                public function sayHello(userName:String = ""):String
                {
                        var greeting:String;
                        if (userName == "")
                        {
                                greeting = "Hello. Please type your user name, and then press the Enter key.";
                        }
                        else if (validName(userName))
                        {
                                greeting = "Hello, " + userName + ".";
                        }
                        else
                        {
                                greeting = "Sorry " + userName + ", you are not on the list.";
                        }
                        return greeting;
                }
                public static function validName(inputName:String = ""):Boolean
                {
                        if (validNames.indexOf(inputName) > -1)
                        {
                                return true;
                        }
                        else
                        {
                                return false;
                        }
                }
        }
}

Я для теста в коде заменил event.keyCode == Keyboard.ENTER на event.keyCode == Keyboard.SPACE и всё работало корректно. Хм, но почему тогда ENTER несрабатывает?

i.o. 25.03.2011 16:01

вы ведь не в самом флэше тесты делаете, а просматриваете swf отдельно в плеере или через браузер? :)

Владимир 25.03.2011 16:06

Цитата:

Сообщение от i.o. (Сообщение 983792)
вы ведь не в самом флэше тесты делаете, а просматриваете swf отдельно в плеере или через браузер? :)

верно, через браузер тоже просматриваю

tsarapkabel 25.03.2011 18:36

http://www.flasher.ru/forum/showpost...17&postcount=5

Владимир 26.03.2011 08:54

У меня даже на другом копме не работает (но там тоже плеер11 версии), вот выложил скомпиленное http://seosliv.ru/flash/HelloWorld.swf

i.o. 26.03.2011 09:16

уберите все лишнее (если есть) и выложите fla. Приведенный выше код должен работать.

Nt9142 26.03.2011 10:36

Цитата:

код HelloWorld.fla (действие - первого кадра):
А где вы импортируете Greeter.as?
или в кадрах он сам классы находит..?

lMarikl 26.03.2011 14:42

Если я не ошибаюсь то не хватает импорта: import flash.events.KeyboardEvent;

i.o. 26.03.2011 15:05

Цитата:

Сообщение от lMarikl (Сообщение 983980)
Если я не ошибаюсь то не хватает импорта: import flash.events.KeyboardEvent;

Код в кадре написан! Подобные импорты не нужны.

Владимир 27.03.2011 20:30

Цитата:

Сообщение от i.o. (Сообщение 983945)
уберите все лишнее (если есть) и выложите fla. Приведенный выше код должен работать.

Выкладываю сорцы:

http://seosliv.ru/flash/HelloWorld.fla
http://seosliv.ru/flash/Greeter.as

Буду рад любым замечаниям.

i.o. 27.03.2011 21:27

Вложений: 1
Вот, пожалуйста:
Вложение 26319

Владимир 28.03.2011 00:27

i.o., спасибо

Сомнения развеяны, с кодом всё ОК, надо было задать, так называемый, "механизм визуализации текста" в свойствах textIn

http://www.imagepost.ru/images/816/textIn.JPG
PS: может кому пригодится, на стр. 37 руководства откуда я взял пример, в 5-м пункте под "Выберете другое текстовое поле" скорее всего подразумевается "сменить Текст TLF на классический"


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

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