【问题标题】:Image wont load from assets图像不会从资产加载
【发布时间】:2014-01-12 01:30:43
【问题描述】:

我正在编写《Beginning Android Games》一书中的安卓游戏。该游戏被称为 Nom 先生,其本质上类似于 Snake。我完成了它的编写,它按预期工作,但是书中的代码只允许使用两个按钮(左箭头和右箭头)左右转动来完成该任务。我想编辑代码以允许另外两个按钮(一个向上箭头和一个向下箭头)允许您打开或关闭。

随书下载的源代码包含一组与这个特定游戏相关的图像。其中一张图片包括左右箭头,所以我只需在 Paint.Net 中打开图片并将其旋转 90 度,使箭头朝上和朝下,而不是从左到右。所有这些图像都存储在 assets 文件夹中,我将旋转后的图像保存为 buttonrotate.png。这是将按钮绘制到屏幕上的代码:

private void drawRunningUI() {
    Graphics g = game.getGraphics();
    g.drawPixmap(Assets.buttons, 0, 0, 64, 128, 64, 64);
    g.drawLine(0, 416, 480, 416, Color.BLACK);
    g.drawPixmap(Assets.buttons, 0, 416, 64, 64, 64, 64);
    g.drawPixmap(Assets.buttons, 256, 416, 0, 64, 64, 64);
    g.drawPixmap(Assets.buttonsrotate, 64, 416, 64, 0, 64, 64);
    g.drawPixmap(Assets.buttons, 192, 416, 0, 64, 64, 64);
}

当我运行应用程序时,加载屏幕会打开,但当我触摸屏幕开始游戏时,它会停止响应并关闭。仅当我包含以下行时才会这样做:

    g.drawPixmap(Assets.buttonsrotate, 64, 416, 64, 0, 64, 64);

否则游戏运行正常。我确定图像在资产中,所以我不知道是什么导致了问题。这是我使用 g.drawPixmap(Assets.buttonsrotate, 64, 416, 64, 0, 64, 64); 运行游戏时得到的 logcat;代码中的一行:

01-11 20:25:50.625: D/ActivityThread(9344): setTargetHeapIdealFree:8388608 01-11 20:25:50.625: D/ActivityThread(9344): setTargetHeapConcurrentStart:2097152 01-11 20:25:50.695: V/SoundPoolThread(9344): beginThread 01-11 20:25:50.695: V/SoundPoolThread(9344): 运行 01-11 20:25:50.715: E/SensorManager(9344): 线程启动 01-11 20:25:50.725: D/SensorManager(9344): registerListener ::句柄= 4名称= MPL加速延迟= 20000侦听器= com.badlogic.androidgames.framework.impl.AccelerometerHandler@42b2bd30 01-11 20:25:50.815: I/Adreno200-EGLSUB(9344): : RGBA_8888 格式。 01-11 20:25:50.855: E/(9344): : 无法打开文件进行读取 01-11 20:25:50.855: E/(9344): : 无法打开文件进行读取 01-11 20:25:50.985: V/SoundPoolThread(9344): 得到消息 m=2, mData=1 01-11 20:25:50.995: V/MediaPlayer(9344): 解码(57, 219601, 9225) 01-11 20:25:51.115:V/SoundPoolThread(9344):得到消息 m=2,mData=2 01-11 20:25:51.115: V/MediaPlayer(9344): 解码(72, 228870, 10222) 01-11 20:25:51.205:V/SoundPoolThread(9344):得到消息 m=2,mData=3 01-11 20:25:51.205: V/MediaPlayer(9344): 解码(74, 153262, 11595) 01-11 20:25:54.709: W/dalvikvm(9344): threadid=14: 线程以未捕获的异常退出 (group=0x41e41438) 01-11 20:25:54.719:E/AndroidRuntime(9344):致命异常:线程 6797 01-11 20:25:54.719: E/AndroidRuntime(9344): java.lang.NullPointerException 01-11 20:25:54.719: E/AndroidRuntime(9344): 在 com.badlogic.androidgames.framework.impl.AndroidGraphics.drawPixmap(AndroidGraphics.java:104) 01-11 20:25:54.719: E/AndroidRuntime(9344): 在 com.badlogic.androidgames.mrnom.GameScreen.drawRunningUI(GameScreen.java:194) 01-11 20:25:54.719: E/AndroidRuntime(9344): at com.badlogic.androidgames.mrnom.GameScreen.present(GameScreen.java:134) 01-11 20:25:54.719: E/AndroidRuntime(9344): 在 com.badlogic.androidgames.framework.impl.AndroidFastRenderView.run(AndroidFastRenderView.java:39) 01-11 20:25:54.719: E/AndroidRuntime(9344): 在 java.lang.Thread.run(Thread.java:856)

请帮忙!快把我逼疯了!!

【问题讨论】:

  • 在哪里声明 Assets.buttonsrotate?

标签: java android nullpointerexception assets android-image


【解决方案1】:

好的,我搜索了那个 GameFramework。您是否在 LoadingScreen.java 文件中添加了图像的路径?您可以看到所有其他资产都已完成此操作。所以添加如下一行:

Assets.buttonsrotate = g.newPixmap("buttonsrotate.png", PixmapFormat.ARGB4444);

这应该可以解决问题。

【讨论】:

  • 谢谢!!我觉得自己像个白痴和一个新手……我几乎把我写的每一堂课都复习了一遍,除了那个。那行得通。再次感谢您的帮助!!
  • 当然,很高兴我能帮上忙!玩得开心 Android :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
相关资源
最近更新 更多