2009-08-09 4 views
1

Я просто играю с базовым ActionScript 3 с помощью Flash CS3 Pro.ActionScript 3 Ссылка на класс MovieClip

я ставлю в ключевом кадре этот очень простой код, чтобы дублировать п символов «брендер»:

for (var i:Number=0; i<20; i++) { 
    var m = new brander("MS_"+i); 
    addChild(m); 
    m.name = "MS_"+i; 
    m.x = 20*i; 
    m.alpha = a; 
    a-=0.05; 
    m.y = 20; 
} 

Символ связан с brander.as класса.

Класс это один:

package { 
    import flash.display.*; 
    public class brander extends MovieClip { 
     var n:String; 
     // 
     public function brander(name) { 
      setName(name); 
     } 
     // 
     function setName(name) { 
      this.n = name; 
     } 
     // 
     function getName() { 
      return n; 
     } 
    } 
} 

и просто слишком.

Теперь: Я заметил, что в этом классе я ничего не могу установить. Поэтому, когда я вызываю setName (при создании экземпляра «brander»), я ничего не устанавливаю. Это возможно?

Я тестировал без отладки, просто писать:

btn.addEventListener(MouseEvent.MOUSE_DOWN, test); 
// 
function test(EVT) { 
    trace(this.getChildByName("MS_2").getName()); 
} 

Почему мы связываем класс, когда этот класс не может хранить информацию? Что я делаю не так?


EDIT:

Я нашел, что это работает:

function fun(EVT) { 
    trace((this.getChildByName("M_2") as brander).getName()); 
} 

, но я не могу понять, почему: не могли бы вы сказать мне, почему?

ответ

1

Причина в том, что функция getChildByName() возвращает объект DisplayObject. DisplayObject не имеет функции getName. Класс brander, однако, наследует (расширяет) DisplayObject, и поэтому вы можете сохранить его как DisplayObject. Но если вы хотите вызвать любую из функций брандера, вам нужно сначала набросить ее на бранд, используя как.

Существует много информации о casting, polymorphism и inheritance несколько мест в Интернете.

+0

Я знаю, что такое кастинг и т. Д. На самом деле в терминах ООП. Как опытный разработчик AS1 и AS2 (медленно и лениво переходя к AS3), я думал, что это была некоторая проблема разработки Flash, а не связанная с программированием. Спасибо, что нашли время ответить. – 2009-08-09 14:25:47