我正在为Android制作破砖游戏并试图改变背景图像。在游戏的第一次运行中,这种情况在100%的时间都有效。
mBackgroundImage = BitmapFactory.decodeResource
(gameView.getContext().getResources(),
R.drawable.planet3);
planet3位于res / drawable文件夹中。
如果我回到上一个屏幕并开始新游戏,我会在大约90%的时间内获得NPE。如果我使用我正在处理的框架提供的资源,它与“planet3”位于同一文件夹中,奇怪的是,无论是新游戏还是第一个游戏等,它都会100%有效。
为什么会在某些时候发生这种情况而不是其他情况。我通常会发现,当它工作时,它是因为我正在调试它并逐行逐步,但这可能只是巧合。
我目前的代码如下,TheGame是游戏运行的当前线程,我上面粘贴的代码是在这个的构造函数中,I.E。每次制作新游戏时,都应设置背景。您还可以在左侧看到文件结构,以验证文件“background”与“planet3”位于同一文件夹中:
就错误而言,我没有实际的错误消息,因为它只是说MOOC已停止工作,然后重新启动程序。
答案 0 :(得分:0)
如果您使用的是沉重的图片,或者请在此处发布所有代码以及异常以及更好的分辨率,可能会发生这种情况
答案 1 :(得分:0)
我认为您的案例中NPE的原因是:
BitmapFactory无法找到上下文参数 gameView.getContext()
您应该使用:
mBackgroundImage = BitmapFactory.decodeResource
(getApplicationContext().getResources(),
R.drawable.planet3);
如果您已通过构造函数在成员变量中保存了上下文,即 mContext ,那么您可以使用它:
mBackgroundImage = BitmapFactory.decodeResource
(mContext.getResources(),
R.drawable.planet3);