【问题标题】:AndEngine Font loading: NullPointerExceptionAndEngine 字体加载:NullPointerException
【发布时间】:2014-05-12 10:45:43
【问题描述】:

好的,我一直在学习本教程并实现我的游戏。但是,我在字体对象上得到了一个空指针异常。我已经在 assets/font 文件夹中加载了 font.ttf 文件,这是代码。请帮忙。谢谢...

在我的 gameScene 类中:

      private void createHUD()
 {
      gameHUD = new HUD();
      scoreText = new Text(20, 420, resourcesManager.font, "Score: 0123456789", new TextOptions(HorizontalAlign.LEFT), vbom);
      scoreText = new Text(20, 420,mFont, "Score: 0123456789", new TextOptions(HorizontalAlign.LEFT), vbom);
      scoreText.setSkewCenter(0, 0);    
      scoreText.setText("Score: 0");
      gameHUD.attachChild(scoreText);
      camera.setHUD(gameHUD);
}

在我的 ResourcesManager 类中:

     private void loadMenuFonts()
    {
     FontFactory.setAssetBasePath("font/");
         final ITexture mainFontTexture = new BitmapTextureAtlas(activity.getTextureManager(), 256, 256, TextureOptions.BILINEAR);

     font = FontFactory.createStrokeFromAsset(activity.getFontManager(), mainFontTexture, activity.getAssets(), "font.ttf", 50, true, Color.WHITE, 2, Color.BLACK);
     font.load();
     }

还有日志猫:

     05-12 15:57:37.478: E/AndroidRuntime(20431): java.lang.NullPointerException:    Attempt to invoke interface method 'org.andengine.opengl.font.Letter   org.andengine.opengl.font.IFont.getLetter(char)' on a null object reference
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.opengl.font.FontUtils.measureText(FontUtils.java:95)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.opengl.font.FontUtils.measureText(FontUtils.java:70)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.opengl.font.FontUtils.measureText(FontUtils.java:49)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.entity.text.Text.setText(Text.java:201)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.entity.text.Text.<init>(Text.java:159)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.entity.text.Text.<init>(Text.java:146)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.entity.text.Text.<init>(Text.java:138)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.entity.text.Text.<init>(Text.java:110)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.entity.text.Text.<init>(Text.java:102)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at com.packagename.scene.GameScene.createHUD(GameScene.java:55)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at com.packagename.scene.GameScene.createScene(GameScene.java:39)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at com.packagename.base.BaseScene.<init>(BaseScene.java:36)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at com.packagename.scene.GameScene.<init>(GameScene.java:26)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at com.packagename.manager.SceneManager$1.onTimePassed(SceneManager.java:112)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.engine.handler.timer.TimerHandler.onUpdate(TimerHandler.java:98)
     05-12 15:57:37.478: E/AndroidRuntime(20431):   at org.andengine.engine.handler.UpdateHandlerList.onUpdate(UpdateHandlerList.java:47)

【问题讨论】:

    标签: java android nullpointerexception andengine


    【解决方案1】:

    试试

    BitmapTextureAtlas=new BitmapTextureAtlas(256, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
    

    代替

    final ITexture mainFontTexture = new BitmapTextureAtlas(activity.getTextureManager(), 256, 256, TextureOptions.BILINEAR);
    

    【讨论】:

    【解决方案2】:

    好的,终于报错了!错误是在 GameScene 类中创建文本时,必须从 ResourceManager 类访问字体。但是字体没有被加载,因为函数 loadMenuFonts() 没有被调用。因此,将代码 sn-p 移至 loadGameFonts() 函数可确保在调用函数 loadGameResources() 函数时调用 loadGameFonts() 函数..

         public void loadGameResources()
    {
        loadGameGraphics();
        loadGameFonts();
        loadGameAudio();
    }
    

    还有 loadGameFonts() 函数:

         private void loadGameFonts()
    {
        FontFactory.setAssetBasePath("font/");
        final ITexture mainFontTexture = new   BitmapTextureAtlas(activity.getTextureManager(), 256, 256, TextureOptions.BILINEAR);
        font = FontFactory.createStrokeFromAsset(activity.getFontManager(), mainFontTexture, activity.getAssets(), "font.ttf", 50, true, Color.WHITE, 2, Color.BLACK);
        //mainFontTexture.load();
        font.load();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多