2013-10-11 7 views
1

внутримышечно в кадре 3 .. У меня есть текстовое поле на имя этапа scoreTxt .. на раме 3 я добавил TryClass ..Использование MovieClip (корень) в ActionScript 3

var Try:TryClass = new TryClass(); 

TryClass имеет функцию updateScore .. это работает нормально, если им на раме 3. так что мой код

 public function updateScore(amount:int):void 
    { 
      score += amount; 
      if(score < 0) score = 0; 

      realNumber = score; 

      setInterval(updateDisplayedScore, 10); 

    } 

    public function updateDisplayedScore():void 
      { 
       displayedNumber += Math.round((realNumber-displayedNumber)/5); 
       if (realNumber - displayedNumber < 5 && realNumber - displayedNumber > -5) 
       { 
        displayedNumber = realNumber; 
       } 
       addZeros(); 
      } 

    public function addZeros():void 
      { 
       var str:String = displayedNumber.toString(); 
       MovieClip(root).scoreNa.text = str; 
      } 

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

MovieClip(this.root).gotoAndStop("Main"); this code is on the class.. 

его достижения кадр «Main», но его ошибки, указывающие на это ->

MovieClip(root).scoreTxt.text 

, что «Main» кадр на кадре 4 .. который я еще не добавил TryClass .. я должен добавить во все мои рамки TryClass? и как это?

Извините за вопрос .. Я еще не знаю, как отлично кодировать в классе .. и получить доступ к временным графикам и другим внешним классам .. Пожалуйста, не используйте более глубокий язык ActionScript .. только для новичков ..

здесь полное сообщение об ошибке, когда я иду к раме "Main"

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
      atTumba/addZeros()[C:\Documents and Settings\Chrissan\Desktop\Game and Docs\Game\Tumba.as:686] 
      atTumba/updateDisplayedScore()[C:\Documents and Settings\Chrissan\Desktop\Game and Docs\Game\Tumba.as:680] 
      atFunction/http://adobe.com/AS3/2006/builtin::apply() 
      atSetIntervalTimer/onTimer() 
      atflash.utils::Timer/_timerDispatch() 
      atflash.utils::Timer/tick() 

это линия 686 из Tumba.as - MovieClip(root).scoreNa.text = str;

public function updateDisplayedScore():void 
       { 
        displayedNumber += Math.round((realNumber-displayedNumber)/5); 
        if (realNumber - displayedNumber < 5 && realNumber - displayedNumber > -5) 
        { 
         displayedNumber = realNumber; 
        } 
        addZeros(); -->> this is the line 680 of Tumba.as 
       } 

о setInterval sir .. его работа прекрасна, потому что я импортировал flash.utils. * .. работает отлично на фрейме 3, который я добавил в класс .. но на «Основной» фрейм. это разве ..

+0

scoreTxt или scoreNa? Правильно? – ton

+0

Я имею в виду счетНа сэра. им жаль .. его еще не исправлено .. когда им отправится в следующий кадр .. кажется, что его найти где оценка Na.text .. потому что scoreNa.text только в кадре 3. –

ответ

0

Попробуйте использовать (root as MovieClip) вместо MovieClip(root)

0

Мое предположение было бы, что «корень» не определен, потому что я предполагаю, TryClass не наследуется от MovieClip или другого DisplayObject, который живет в существующей иерархией ,

Чтобы исправить это, я бы добавил параметр к конструктору класса. Тогда я пришлю ему мувиклип, к которому вы можете получить доступ. Например, если вы создаете экземпляр своего класса из мувиклипа, просто отправьте ему «это» для этого фильма.

public class TryClass { 
    ... 
    static var myroot:MovieClip = null; 
    ... 
    public function TryClass(someclip:MovieClip=null) { 
     ... 
     if (this.myroot == null && someclip != null && someclip.root != undefined) { 
     this.myroot = someclip.root; 
     } 
     ... 
    } 
    ... 
} 

Тогда из в мувиклип:

var something = new TryClass(this); 

Во всяком случае, это метод я использую для класса, который я делаю. Для меня у меня есть добавление экземпляра внешнего клипа, если класс обнаруживает, что корневой каталог еще не загружен. В моем случае - универсальный загрузочный бар, вызываемый из моего класса оболочки загрузки. Если в конкретном фильме, в который я его положил, уже есть пользовательская панель загрузки, то ничего не будет делать, но для любого, у меня его нет, он добавит его.

Смежные вопросы