AndEngine 解决Sprite和Text加载时出现黑块的简单方案

      最近工作比较忙,但还是有在用Andengine这个开源游戏引擎在写个游戏的demo。最近遇到的问题是,当图片或文字资源较多的时候,总是容易经常出现图片或文字加载时,先出现一个黑色的色块,然后图片纹理才显示出来,体验非常的不好。关于这个问题,也在网上找了很多资料,刚开始以为是资源的加载没有放到线程当中去加载完再显示,后面尝试了一下,发觉图片或文字数量较多的时候或者是资源需要动态添加加载的情况,这个问题依然存在。

      之前在开源中国上也有找到别人发的解决方案:Andengine后台资源加载的一些问题,该方法的思路其实也就是资源的加载需要放到线程中,在资源加载完后,才显示出来。

      后面去翻查了一下Sprite和Texture的源码,发现了这两个方法:boolean isLoadedToHardware()boolean isUpdateOnHardwareNeeded(),即Texture可以判断是否已加载到硬件设备中,于是尝试修改Sprite和Text的源码,改动如下:

Sprite.java

@Override
protected void preDraw(final GLState pGLState, final Camera pCamera) {
	//绘制之前判断Texture是否已加载到硬件
	if(this.getTextureRegion().getTexture().isLoadedToHardware()){
		super.preDraw(pGLState, pCamera);

		this.getTextureRegion().getTexture().bind(pGLState);

		this.mSpriteVertexBufferObject.bind(pGLState, this.mShaderProgram);
	}
}
 

 

Text.java

@Override
protected void preDraw(final GLState pGLState, final Camera pCamera) {
	//绘制之前判断是否已将Texture加载到硬件中
	if(this.getFont().getTexture().isLoadedToHardware()){
		super.preDraw(pGLState, pCamera);

		this.mFont.getTexture().bind(pGLState);

		this.mTextVertexBufferObject.bind(pGLState, this.mShaderProgram);
	}
}

      拿部分测试机器试过之后,发觉问题黑快的问题竟然不会出现了。唯一的缺点就是贴图或文字仍然是稍微等待一小会才显示出来,但对于体验上来说,还可以接受。

      如有遇到黑块问题的朋友欢迎测试,如有问题也请反馈给我,谢谢!

posted @ 2013-04-18 11:48  路人 乙  阅读(416)  评论(0编辑  收藏  举报