2014-01-23 2 views
0

я сделать класс как это:Null ссылка на объект ActionScript 3

package 
{ 
    import flash.display.Sprite; 
    import flash.text.TextField; 

    public class Hint extends Sprite 
    { 
     public static var _instance:Hint = null; 

     public function Hint() 
     { 
      _instance = this; 
     } 

     public function DrawHintText():void 
     { 
      Const._scoreText = new TextField(); 
      Const._scoreTextHolder = new TextField(); 
      Const._highScoreText = new TextField(); 
      Const._highScoreTextHolder = new TextField(); 
      Const._timeLeft = new TextField(); 
      Const._timeLeftHolder = new TextField(); 

      Const._scoreTextHolder.textColor = 0xFFFFFF; 
      Const._scoreTextHolder.x = stage.stageWidth - 350; 
      Const._scoreTextHolder.y = 100; 
      Const._scoreTextHolder.text = "Score: "; 
      Const._scoreTextHolder.selectable = false; 

      Const._scoreText.textColor = 0xFFFFFF; 
      Const._scoreText.x = stage.stageWidth - 250; 
      Const._scoreText.y = 100; 
      Const._scoreText.text = "--"; 
      Const._scoreText.selectable = false; 

      Const._highScoreTextHolder.textColor = 0xFFFFFF; 
      Const._highScoreTextHolder.x = stage.stageWidth - 350; 
      Const._highScoreTextHolder.y = 150; 
      Const._highScoreTextHolder.text = "High Score: "; 
      Const._highScoreTextHolder.selectable = false; 

      Const._highScoreText.textColor = 0xFFFFFF; 
      Const._highScoreText.x = stage.stageWidth - 250; 
      Const._highScoreText.y = 150; 
      Const._highScoreText.text = "--"; 
      Const._highScoreText.selectable = false; 

      Const._timeLeftHolder.textColor = 0xFF0000; 
      Const._timeLeftHolder.x = stage.stageWidth - 350; 
      Const._timeLeftHolder.y = 200; 
      Const._timeLeftHolder.text = "Time Left: "; 
      Const._timeLeftHolder.selectable = false; 

      Const._timeLeft.textColor = 0xFF0000; 
      Const._timeLeft.x = stage.stageWidth - 275; 
      Const._timeLeft.y = 200; 
      Const._timeLeft.text = "00:00"; 
      Const._timeLeft.selectable = false; 

      addChild(Const._scoreText); 
      addChild(Const._scoreTextHolder); 
      addChild(Const._highScoreText); 
      addChild(Const._highScoreTextHolder); 
      addChild(Const._timeLeft); 
      addChild(Const._timeLeftHolder); 
     } 

    } 

} 

и я призвал GameManager:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.text.TextField; 


    [SWF(width='1366',height='768',backgroundColor='#000000',frameRate='30')] 

    public class GameManager extends Sprite 
    { 

     public function GameManager():void 
     { 
      DrawHintText(); 
      GenerateField(); 
      ShowField(); 
      GenerateGems(); 
     } 

     private function GenerateField():void 
     { 
      Const._gridField = new Array(); 

      for (var i:uint = 0; i < Const._gridSizeY; i++) 
      { 
       Const._gridField[i] = new Array(); 

       for (var j:uint = 0; j < Const._gridSizeX; j++) 
       { 
        Const._gridField[i][j] = 0; 
       } 
      } 
     } 

     private function ShowField():void 
     { 
      Const._fieldSprite = new Sprite(); 
      addChild(Const._fieldSprite); 
      Const._fieldSprite.graphics.lineStyle(1, 0xFFFFFF); 

      for (var i:uint = 0; i < Const._gridSizeY; i++) 
      { 
       for (var j:uint = 0; j < Const._gridSizeX; j++) 
       { 
        Const._fieldSprite.graphics.beginFill(0x666666); 
        Const._fieldSprite.graphics.drawRect(25 + 65 * j, 80 + 60 * i, 65, 60); 
        Const._fieldSprite.graphics.endFill(); 
       } 
      } 
     } 

     private function DrawHintText():void 
     { 
      Hint._instance.DrawHintText(); 
     } 

     private function GenerateGems():void 
     { 

     } 

    } 

} 

и вот Const:

package 
{ 
    import flash.display.Sprite; 
    import flash.text.TextField; 

    public class Const 
    { 
     public static var _gridField:Array; 

     public static var _fieldSprite:Sprite; 

     public static var _scoreText:TextField; 
     public static var _scoreTextHolder:TextField; 
     public static var _highScoreText:TextField; 
     public static var _highScoreTextHolder:TextField; 
     public static var _timeLeft:TextField; 
     public static var _timeLeftHolder:TextField; 

     public static const _gridSizeX:Number = 10; 
     public static const _gridSizeY:Number = 10; 

     public function Const() 
     { 

     } 

    } 

} 

когда я запустил код, я получил ошибку:

enter image description here

Где я могу пропустить код?

+0

Вы вызывали 'new Hint();' перед вызовом 'DrawHintText()'? – Cherniv

+0

нет, я не вызвал новый Hint(); , даже я назвал это, экземпляр будет непригодным – Kaoru

ответ

0

Возможно, это глупый вопрос, но вы на самом деле создаете экземпляр Hint? Потому что до тех пор, пока вы не сделаете new Hint(), что Hint._instance будет пустым.

+0

нет, я не объявлял ни одного «нового Hint()» где-то, даже создав новый Hint(), экземпляр будет неактуальным. – Kaoru

+0

решен! Благодарю. – Kaoru

1

Вызывающая функция DrawHintText() в Hint._instance.DrawHintText(); не создает экземпляр класса Hint.

Постарайтесь подставить свою общедоступную переменную публичным получателем.

private static var __instance:Hint = null; 

public static function get _instance():Hint { 
    if (!__instance) { 
     __instance = new Hint(); 
    } 
    return __instance; 
} 

И капля конструктора, потому что геттер делает это ненужным.

+0

нет, не будет сидеть Петр Грехоровский – Kaoru

+0

Не отображается ли сообщение об ошибке, или оно изменилось? –

+0

еще такой же сэр, как и предыдущая ошибка – Kaoru

0

Попробуйте что-то вроде:

public class Hint extends Sprite 
{ 
    private static var _instance:Hint; 

    public function Hint() 
    { 
     if (_instance) throw new Error("Hint... use getInstance()"); 
     _instance = this; 
    } 

    public static function getInstance():Hint 
    { 
     if (!_instance) new Hint(); 
     return _instance; 
    } 

    //DrawHintText >> rename to drawHintText 
    public function drawHintText():void 
    { 
     //your code here 
    } 
} 

И использовать:

Hint.getInstance().drawHintText(); 
+0

Я уже пробовал, что gPeart, и результат все тот же – Kaoru

+0

Не могли бы вы поделиться своим кодом, потому что я просто попробовал здесь и работает – gabriel

+0

i обновил вопрос с полным кодом – Kaoru

0

Использование Flash Builder, который стоит денег, или флэш-Develop. который является бесплатным. Оба будут показывать ошибки времени компиляции, с номерами строк и файлом местоположения.

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

Также автозаполнение сокращает время кодирования как минимум на половину времени.

+0

обновлено по вопросу sir – Kaoru

+0

@Kaoru обновил мой ответ. это долгосрочное решение ваших проблем. – Discipol

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