2013-10-26 4 views
0

Я получаю ошибку в заголовке при попытке доступа к методу в другом классе. У меня есть основной класс ZombieBots, который связан с одноименным клипом. Затем у меня есть еще три клипа, которые все добавляются в клип ZombieBots во время выполнения, и каждый из них имеет свои собственные классы.Ошибка 1006: Не функция

При попытке получить доступ к методу в классе ZombieBots от одного из других 3-х классов, я получаю ошибку 1006

функции Я пытаюсь получить доступ в классе ZombieBots, которые не могут быть доступны:

package { 
    import flash.events.*; 
    import flash.display.MovieClip; 
    import flash.geom.Rectangle; 

    public class ZombieBots extends MovieClip{ 

     private var pLives:int; 
     private var pScore:int; 
     private var pSkill:int; 
     private var pItems:int; 
     private var characterMC:Character; 
     private var cGameObjs:Array; 

     public function ZombieBots() { 
      /*cGameObjs = new Array(); 
      addCharacter(); 
      addItems(); 
      addBots(); 

      pLives = 5 - pSkill; 
      pScore = 0; 

      pItems = pSkill + 5;*/ 
      resetGame(); 
     } 

     private function addCharacter():void{ 
      trace("Adding the character"); 

      if (!characterMC){ 
      var myBorder:Rectangle = new Rectangle(35,35,600,480); 
      var myXY:Array = [38, 400]; 
      var myChar:int = Math.ceil(Math.random()*3); 
      var myKeys:Array = [37,39,38,40]; 
      var myDistance:int = myChar * 3; 
      characterMC = new Character(myBorder, myXY, myKeys, myChar, myDistance); 
      addChild(characterMC); 
      } 
      else{ 

       characterMC.x = 38; 
       characterMC.y = 510; 


       characterMC.gotoAndStop(pSkill); 

      } 
     } 


    private function addItems():void{ 
     trace("yeah boi"); 
     var mySkill:int = Math.ceil(Math.random() *3); 
     var myMaxItems:int = mySkill + 5; 
     trace(mySkill); 
     trace(myMaxItems); 
     trace(this); 
     for (var i:int = 0; i < myMaxItems; i++){ 
      var thisItem:Item = new Item(this, characterMC, mySkill); 
      thisItem.name = "item" + i; 
      cGameObjs.push(thisItem); 
      addChild(thisItem); 
     } 

     pSkill = mySkill; 
     updateScores(); 
    } 

     private function addBots():void{ 
      trace("adding the bots bra"); 
      var myBorder:Rectangle = new Rectangle(100,100,400,350); 
      var mySkill:int = Math.ceil(Math.random()*3); 
      var myMaxBots:int = mySkill +10; 
      for (var i:int = 0; i < myMaxBots; i++){ 
       var thisBot:Bot = new Bot(myBorder, characterMC, mySkill); 
       thisBot.name = "bot" + i; 
       cGameObjs.push(thisBot); 
       addChild(thisBot); 

      } 
     } 

     private function updateScores():void{ 
      scoreDisplay.text = String(pScore); 
      itemsDisplay.text = String(pItems); 
      livesDisplay.text = String(pLives); 
      msgDisplay.text = "Orc Invasion"; 

     } 

     public function updateLives(myBot:MovieClip):void{ 
      trace("update lives"); 
      pLives--; 
      pScore -= myBot.getPts(); 
      var myIndex:int = cGameObjs.indexOf(myBot); 
      cGameObjs.splice(myIndex, 1); 
      if (pLives > 0){ 
       updateScores(); 

      } 

      else{ 
       gameOver(false); 
      } 
     } 

     public function updateItems(myItem:MovieClip):void{ 
     trace("update items"); 
     pItems--; 
     pScore += myItem.getPts(); 
     var myIndex:int = cGameObjs.indexOf(myItem); 
     cGameObjs.splice(myIndex, 1); 
     if (pItems > 0){ 
      updateScores(); 
     } 

     else{ 
      gameOver(true); 
     } 

    } 

     private function gameOver(bool:Boolean):void{ 
      trace("Game over dawg"); 
      updateScores(); 
      if(bool){ 
       msgDisplay.text = "Good job buddy"; 
      } 
      else{ 
       msgDisplay.text = "You suck dawg"; 
      } 
      removeLeftovers(); 
     } 

     private function resetGame():void{ 
      playAgainBtn.visible = false; 
      playAgainBtn.removeEventListener(MouseEvent.CLICK,playAgain); 
      cGameObjs = new Array(); 
      addCharacter(); 
      addItems(); 
      addBots(); 

      pLives = 5 - pSkill; 
      pScore = 0; 

      pItems = pSkill + 5; 
      updateScores(); 
     } 

     private function playAgain(evt:MouseEvent):void{ 
      resetGame(); 
     } 

     private function removeLeftovers():void{ 
      trace("Removing leftover items and bots"); 
      for each(var myObj in cGameObjs){ 
       myObj.hasHitMe(); 
       myObj = null; 
      } 
      playAgainBtn.visible = true; 
      playAgainBtn.addEventListener(MouseEvent.CLICK, playAgain); 
     } 





    } 

} 

и это класс, где я пытаюсь получить доступ к этой функции в одной из других 3-х классов:

package { 
    import flash.display.MovieClip; 
    import flash.events.*; 
    import ZombieBots; 

    public class Item extends MovieClip{ 
     private var cNumItem:int; 
     private var cNumPts:int; 
     private var characterMC:MovieClip; 
     private var ZombieBot:ZombieBots; 

     public function Item(myZB:ZombieBots, myChar:MovieClip, mySkill:int=1) { 
      ZombieBot = myZB; 
      cNumItem = Math.ceil(Math.random() * (mySkill * 3 + 1)); 
      characterMC = myChar; 
      this.addEventListener(Event.ADDED_TO_STAGE,initItem); 
      addEventListener(Event.ENTER_FRAME, checkCollision); 
     } 


     private function initItem(evt:Event):void{ 

      this.gotoAndStop(cNumItem); 
      cNumPts = cNumItem * 25; 
      setPosition(); 
      this.removeEventListener(Event.ADDED_TO_STAGE,initItem); 
     } 

     private function setPosition():void{ 

      this.x = (Math.ceil(Math.random() * 10)*50); 
      this.y = (Math.ceil(Math.random()*10)*35); 

     } 

     private function checkCollision(evt:Event){ 
      if (characterMC.hitTestObject(this)){ 

       ZombieBot.updateItems(this); 
       hasHitMe(); 
      } 
     } 

     public function hasHitMe():void{ 
      trace("remove"); 
      removeEventListener(Event.ENTER_FRAME, checkCollision); 
      this.parent.removeChild(this); 
     } 

     public function getPts():int{ 
      return cNumPts; 
     } 
    } 

} 

может кто-нибудь помочь?

+0

myItem.getPts(); у вас нет метода getPts() в классе предметов –

+0

@Bolzano, весь класс - 200 строк. Я приводил пример проблемы. – rakeshisu

+0

да, но вам нужно добавить определение своих функций или методов или классов, которые используются в основном коде ... иначе как мы могли бы найти вашу ошибку. очевидно, что вы вызываете что-то, но не определяете его как функцию. –

ответ

1

updateItems не является способом MovieClip. Это метод вашего класса ZombieBots.

Кастинг вашего экземпляра ZombieBots (который я предполагаю root) как MovieClip, позволит вам использовать его методы или методы класса, которые он унаследовал.

Попробуйте это:

var zombieBotsInstance:ZombieBots = root as ZombieBots; 
zombieBotsInstance.updateItems(this); 
+0

Woops, это моя ошибка. отредактировал оригинальный пост с правильным кодом. – rakeshisu

+0

Я пробовал это, но теперь я получаю ссылку на нулевой объект на строке zombieBotsInstance.updateItems (this). У меня такое чувство, что попытка доступа к корню таким образом - проблема, но я не знаю, как ее исправить. – rakeshisu

+0

Опубликуйте обновленный код. Я делаю несколько предположений здесь. Что такое корень? Является ли это экземпляром ZombieBots, то есть классом документа? – prototypical

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