взаимодействие с клавиатурой / текстовыми полями помогите пожалуйста - PullRequest
1 голос
/ 11 января 2011

Обычно для строки в объект преобразуется следующим образом.

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 ]

2 голосов
/ 11 января 2011

В вашем коде есть некоторые неудобства:

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

Теперь ваш ответ: используйте 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 имеет фокус, то есть пользователь должен сначала щелкнуть по нему.

0 голосов
/ 11 января 2011

Если вам нужно передать ключ charCode в TextField, последний должен прослушать KeyboardEvent и извлечь информацию из свойства charCode событияhttp://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

Ваша точка зрения на AS3 "иная" ... Например, getChildByName не преобразует строку в объект, он в основном выполняет то, что указано в имени метода, он извлекает дочерний элемент родителя, используя его имяв качестве ссылки.

Похоже, вы адаптируете язык к AS3.Я сомневаюсь, что это сработает ...

...