与键盘/文本域的互动请帮助

时间:2011-01-11 11:30:06

标签: actionscript-3 actionscript flash-cs5

通常,对象的字符串转换如下。

var obj:object=getChildByName("string");

我们可以为obj.x=100;提供属性但是在一系列刺痛的情况下

[objet Stage].[object MainTimeline].[object TextField]

它不会起作用。实际上我需要为目标路径赋予属性,这是一个字符串 我所做的?? 以下是获取动画片段路径的代码:

 addEventListener(MouseEvent.CLICK, targetMC);
function targetMC(MouseEvent:Event):void
{
 var curinstance = MouseEvent.target.valueOf();
 var targ:Object = curinstance.parent;
 var path = curinstance;
 do
 {
  if (targ == "[object Stage]")
  {
   path = targ + "." + path;
  }
  else
  {

   path = targ + "." + path;
  }

  targ = targ.parent;
 } while (targ);


 trace(path);

}

我想将属性赋予路径

2 个答案:

答案 0 :(得分:2)

您的代码很多事情都很尴尬:

  1. 不要比较对象的字符串值以找出类类型。使用is关键字:

    if (obj.parent is Stage) doSomething();
    
  2. 不要使用类名作为参数名称:MouseEvent是一种类型!

    function targetMC ( ev:MouseEvent ) // ...more code
    
  3. 根据调用它们的事件命名处理程序方法很有用,例如:

    function onMouseClick (ev:MouseEvent) 
    

    function mouseClickHandler (ev:MouseEvent) 
    
  4. 如果可以避免它,请不要强制转换为Object来访问成员,而是尝试使用子类类型 - 它允许编译器更有效地检查代码是否存在错误。由于显示列表中的所有对象都是DisplayObject的实例,因此您可以使用:

    var obj:DisplayObject = ev.target as DisplayObject;
    
  5. 如果要输出对象的路径,请使用实例名称而不是类型 - 您可能有多个TextField!

    private function getObjectPath (obj:DisplayObject) : String {
        var path:String = obj.name;
        if (obj.parent != null && !(obj.parent is Stage)) {
            path = getObjectPath (obj.parent) + "." + path;
        }
        return path;
    }
    
  6. 现在回答你:使用KeyboardEvent。

    textField.addEventListener (KeyboardEvent.KEY_UP, onKeyUp);
    

    private function onKeyUp (ev:KeyboardEvent) : void {
        var tf:TextField = ev.target as TextField;
        var text:String = tf.text;
        tf.text = text + String.fromCharCode(charCode);
    } 
    

    请注意,只有TextField具有焦点时才会起作用,即用户必须先单击它。

答案 1 :(得分:0)

如果需要将密钥charCode传递给TextField,后者应该监听KeyboardEvent并从事件的charCode属性中检索信息
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

您对AS3的看法是“不同的”......例如,getChildByName不会将String转换为Object,它基本上执行方法名称所声明的内容,它使用其名称作为引用来检索父级的子级。

看起来你正在调整你来自AS3的语言。我怀疑这会起作用......