2015-01-24 2 views
-1

У меня возникли проблемы с вызовом функций из других классов. Я хочу вызвать функцию в одном классе, которая обновляет отображение оценки в другом классе. Код ошибки для этого:actionscript 3 - ошибка # 1009 вызов функции вызова из другого класса

TypeError: Ошибка # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект. в code.functions :: EnemyYellow) [код \ функции \ EnemyYellow.as: 18] ( в коде :: Main() [\ код \ Main.as: 27]

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

Главный файл:

package code { 

    import flash.display.MovieClip; 
    import flash.events.*; 
    import code.*; 

public class Main extends MovieClip { 

    public var _enemy:EnemyYellow; 
    public var playerHP:Number; 

    public function Main() { 

     playerHP = 10; 
     _playerHPdisplay.text = playerHP.toString(); 
     trace(playerHP) 

     _enemy = new EnemyYellow; 
    } 


    public function lowerHP():void 
    { 
     playerHP = playerHP - 1; 
     _playerHPdisplay.text = playerHP.toString(); 
     trace(playerHP) 

    } 
    } 
} 

Второй файл:

package code.functions { 

    import flash.display.MovieClip; 
    import flash.events.*; 
    import code.Main; 

public class EnemyYellow extends MovieClip { 

    public var _main:Main; 

    public function EnemyYellow() { 
     _main.lowerHP(); 
     trace ("done") 
    } 
    } 
} 

Я также попытался добавить _main = новый Main; во втором файле, но игра просто загружается с помощью черного экрана и ошибка в отношении недопустимых данных.

ответ

0

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

public var _main:Main; 

Эта линия просто заявляет, что будет быть переменной типа Main. Но на данный момент значение _main составляет null. Таким образом, вы правы, что вам нужно позвонить:

_main = new Main(); 

После того, как вы сделали это, первая ошибка исчезнет. Но тогда у вас есть вещи в этом MovieClip, которые все еще неопределенны. Как _playerHPdisplay. Откуда это? Это пример со сцены или что? Вы только что создали совершенно новый объект и не имеете любые ссылки на другие объекты, TextFields или что-то еще.

Так что это в основном отвечает на ваш текущий вопрос и проблему, но уверен, что у вас будет больше :)

+0

_playerHPdisplay.text является отображение на экране. –

+0

Подумайте о классах как ветках дерева. Каждая ветка знает, как долго она идет оттуда, но не знает, что перед ней. Корень дерева (корень вашего проекта) знает все. Итак, теперь, когда вы получили новую ветку ('Main'), вам нужно либо передать информацию о вещах раньше (' _playerHPdisplay'), либо она не будет работать. Передайте его как переменную в конструктор, например. Есть много способов сделать это - узнать больше о классах в AS3. –

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