ActionScript 3 Flash Keyboard Event - PullRequest
       19

ActionScript 3 Flash Keyboard Event

1 голос
/ 12 октября 2011

Интересно, мог бы кто-нибудь рассказать мне о более простом способе решения этого кода. Я новичок в flash и actionscript.

Я хочу иметь текстовое поле, в котором пользователь вводит свое имя.Каждый раз, когда символ нажимается, и изображение этой буквы отображается под текстовым полем.Так например.Права пользователя Джон.Джон отображается в хороших изображениях ниже.

У меня это работает, но я должен создать поле ввода для каждого символа, поэтому у меня осталось, например,.6 полей для каждой буквы имени, которая будет принимать только символ каждого.Причина в том, что я не могу размещать изображения друг за другом, они продолжают перезаписывать позицию первого введенного символа, если используется только одно текстовое поле.

Я знаю, что мне придется пройти долгий путь, должно быть что-то намного проще.

Вот код, это будет очень утомительно, если мне придется идти по этому пути.Может ли кто-нибудь дать мне быстрый совет о том, как это сделать.

Спасибо, Финтан

////////////////111111////////////////////
firstname.addEventListener(KeyboardEvent.KEY_DOWN, key_pressed);
function key_pressed(event:KeyboardEvent):void {
if (event.charCode == 65) {
    var fl_MyInstance_2:LibrarySymbol = new LibrarySymbol();
        fl_MyInstance_2.x = 50
        fl_MyInstance_2.y = 200
        addChild(fl_MyInstance_2);

} else if (event.charCode == 66) {
    var fl_MyInstance_3:letterb = new letterb();
        fl_MyInstance_3.x = 50
        fl_MyInstance_3.y = 200
    addChild(fl_MyInstance_3);

} else if (event.charCode == 67) {
    var fl_MyInstance_4:letterc = new letterc();
        fl_MyInstance_4.x = 50
        fl_MyInstance_4.y = 200
    addChild(fl_MyInstance_4);

} else if (event.charCode == 68) {
    var fl_MyInstance_5:letterd = new letterd();
        fl_MyInstance_5.x = 50
        fl_MyInstance_5.y = 200
    addChild(fl_MyInstance_5);

} else if (event.charCode == 69) {
    var fl_MyInstance_6:letterd = new letterd();
        fl_MyInstance_6.x = 50
        fl_MyInstance_6.y = 200
    addChild(fl_MyInstance_6);  
}

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Вы говорите: «Так, например. Права пользователя Джон. Джон отображается в виде красивых изображений ниже».Так что, если я вас правильно понимаю, вы хотите отобразить предварительно отрисованные растровые изображения символов, введенных пользователем?

Если это так, рассмотрите следующее:

private var _image:Sprite = new Sprite(); // a container to hold your bitmaps (jpgs/pngs)
private var _spacing:uint = 30; // some arbitrary value to space them apart //
myInputTextField.addEventListener(Event.CHANGE, onNameChange);

function onNameChange(e:Event):void
{
// first clear the image sprite to accommodate things like backspaces //
    while(_image.numChildren) _image.removeChildAt(0);
// get the current string in the input textfield //
    var s:String = myInputTextField.text;
// and then layout a series of pre-rendered bitmaps based on those characters //
    for (var i:uint=0; i<s.length; i++){
        var c:String = s.substr(i, 1); // one character //
        var b:Bitmap = getImageCharacter(c);
            b.x = _spacing * i;
        _image.addChild(b);
    }
}

Следующий помощникФункция - это просто карта, которая берет символ и отображает его в объект BitmapData, который, возможно, может находиться в вашей библиотеке.

function getImageCharacter(s:String):Bitmap
{  
    switch(s){
        case a: return new Bitmap(new ImageA()); break;
        case b: return new Bitmap(new ImageB()); break;
        case c: return new Bitmap(new ImageC()); break;
    }
}

В этом случае ImageA может быть файлом .png в вашей библиотеке, для которого установлено значениеэкспортировать как «ImageA».

Это простой пример, который может быть гораздо более оптимизирован, но он должен помочь вам начать правильный путь.

0 голосов
/ 12 октября 2011

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

Прежде всего, вам не нужен один отдельный класс для каждой буквы алфавита - это было бы как минимум 26 классов или 52, если учитывать верхний / нижний регистр, и это совершенно не нужно, потому что все без исключения служить одной цели - показать одну букву.

Вместо этого я бы сделал один мувиклип с 26 различными кадрами (или 52, если прописные / строчные буквы) помечены от «a» до «z» (или от «A» до «z»). В каждом из этих кадров поместите чертеж одной буквы и одной stop();. Свяжите только этот MovieClip с классом - Letter или что-то еще.

Затем, когда пользователь пишет в ваше имя TextField, вы должны быть осторожны, потому что он / она может нажимать другие клавиши, которые не являются буквами - например, клавиша del, стрелка назад и т. Д., Которые могут испортить ваше визуальное представление. представление. Я думаю, что единственный способ убедиться, что вы отображаете все правильно, - это каждый раз рисовать все содержимое текстового поля, например:

//KEY UP EVENT
firstname.addEventListener(KeyboardEvent.KEY_UP, key_pressed);

//container (empty) movieclip
var container_mc:MovieClip = new MovieClip();
addChild(container_mc);

function key_pressed(e:KeyboardEvent):void 
{

  var offset:Number=0;

  //clear container to update visual representation
  while(container_mc.numChildren>0)
    container_mc.removeChildAt(0);

  var letterInstance:Letter; //your linked class

  for(var i:uint=0;i<firstname.text.length;i++)
  {  
     letterInstance = new Letter();

     //go to frame corresponding to the letter at position "i"
     //OR use your own system to choose the image for each letter!
     letterInstance.gotoAndStop(first_name.text.charAt(i));

     //postion: x (plus offset to avoid overwritting), y
     letterInstance.x = 50 + offset;
     offset+= letterInstance.width;
     letterInstance.y = 200;

     //add letter to container
     container_mc.addChild(letterInstance);
   }

}

В этом коде все еще есть некоторые проблемы, такие как имена с не буквенными символами, такими как пробелы, апострофы и т. Д., Но я думаю, что вы можете начать работать здесь;)

Надеюсь на помощь, удачи!

...