Flash Actionscript 3闪存键盘事件

Flash Actionscript 3闪存键盘事件,flash,actionscript-3,events,textinput,Flash,Actionscript 3,Events,Textinput,我想知道有没有人能告诉我一个更简单的方法来解决这段代码。我对flash和actionscript还不熟悉 我想要一个文本框,用户在其中输入他们的名字。每次按下一个字符,该字母的图像就会显示在文本框下方。比如说。用户权限,约翰。约翰在下面漂亮的图片中展示 我已经做到了这一点,但我必须为每个字符创建一个输入框,所以我的名字的每个字母都有6个输入框,每个输入框只接受一个字符。这样做的原因是,我不能将图像放在彼此之后,如果只使用一个文本框,它们会一直覆盖键入的第一个字符的位置 我知道我要走很长的路,一定

我想知道有没有人能告诉我一个更简单的方法来解决这段代码。我对flash和actionscript还不熟悉

我想要一个文本框,用户在其中输入他们的名字。每次按下一个字符,该字母的图像就会显示在文本框下方。比如说。用户权限,约翰。约翰在下面漂亮的图片中展示

我已经做到了这一点,但我必须为每个字符创建一个输入框,所以我的名字的每个字母都有6个输入框,每个输入框只接受一个字符。这样做的原因是,我不能将图像放在彼此之后,如果只使用一个文本框,它们会一直覆盖键入的第一个字符的位置

我知道我要走很长的路,一定有更容易的事情

这是代码,如果我必须走这条路,那将非常乏味。有人能给我一个关于这件事的正确方法的提示吗

谢谢 芬坦


我将给您一些代码和提示,试图为您指出正确的方向

首先,每个字母不需要一个不同的类-如果考虑到大写/小写,至少需要26个类,或者52个类,这是完全没有必要的,因为每个和所有字母只用于一个目的-显示一个字母

相反,我要做的是制作一个带有26个不同帧(或52个,如果大写/小写)的MovieClip,标记为“a”到“z”(或“a”到“z”)。在每个框架中,放置一个字母和一个
stop()。只把这部电影链接到一封班级信,或者其他什么

然后,当用户在firstname文本字段上书写时,您必须小心,因为他/她可能会按到其他非字母的键,例如del键、back箭头等,这些键可能会干扰您的视觉表现。我认为确保正确显示所有内容的唯一方法是每次绘制textfield的全部内容,如下所示:

//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);
   }

}
//向上键事件
firstname.addEventListener(KeyboardEvent.KEY\u向上,按键按下);
//容器(空)movieclip
var container_mc:MovieClip=新的MovieClip();
addChild(容器和mc);
按下功能键(e:键盘事件):无效
{
变量偏移量:数值=0;
//清除容器以更新视觉表示
while(容器\u mc.numChildren>0)
容器_mc.removeChildAt(0);
var letterInstance:Letter;//链接的类

对于(var i:uint=0;i我将给您一些代码和提示,以尝试为您指出正确的方向

首先,每个字母不需要一个不同的类-如果考虑到大写/小写,至少需要26个类,或者52个类,这是完全没有必要的,因为每个和所有字母只用于一个目的-显示一个字母

相反,我要做的是制作一个带有26个不同帧(或52个,如果大写/小写)的MovieClip,标记为“a”到“z”(或“a”到“z”)。在每个帧中,放置一个字母的绘图,以及一个
stop();
。仅将此MovieClip链接到一个类字母或其他任何内容

然后,当用户在你的名字文本字段上书写时,你必须小心,因为他/她可能会按其他非字母的键-例如,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);
   }

}
//向上键事件
firstname.addEventListener(KeyboardEvent.KEY\u向上,按键按下);
//容器(空)movieclip
var container_mc:MovieClip=新的MovieClip();
addChild(容器和mc);
按下功能键(e:键盘事件):无效
{
变量偏移量:数值=0;
//清除容器以更新视觉表示
while(容器\u mc.numChildren>0)
容器_mc.removeChildAt(0);
var letterInstance:Letter;//链接的类
对于(var i:uint=0;i您说“例如,用户权限john.john显示在下面的漂亮图像中。”因此,如果我理解正确,您希望显示用户键入的字符的预渲染位图图像吗

如果是这样的话,请考虑以下内容:

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);
    }
}
在本例中,ImageA可以是库中设置为导出为“ImageA”的.png文件

这只是一个简单的例子,可以进行更多的优化,但这应该让您开始正确的道路。

您说“例如,用户权限john.john显示在下面的漂亮图像中。”因此,如果我理解正确,您想显示用户键入的字符的预渲染位图图像吗

如果是这样的话,请考虑以下内容:

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);
    }
}
在本例中,ImageA可以是库中设置为导出为“ImageA”的.png文件


这只是一个简单的例子,可以进行更多的优化,但这应该会让您走上正确的道路。

感谢您的帮助Braitsch。我无法找出公共/私人变量,我一直遇到错误1013/1114。因此我使用了下面的电影建议。感谢您的帮助Braitsch。我无法找出公共/私人变量,我一直收到错误1013/1114。所以我使用了下面的电影建议。很高兴帮助mate,如果这个答案解决了你的问题,绿色支票(接受)将不胜感激!;)很高兴帮助mate,如果这个答案解决了你的问题,绿色支票(接受)将不胜感激!)