在AndEngine中,我们加载图片资源通常使用的是放在assets目录下的加载方式,其他的方式用到的很少,可能是因为例子里面只提供了这种方式的原因吧,其实AndEngine还为我们提供了其他两种方式,一种是app中常用到的从res目录下的图片资源的加载(通过R.java文件加载),另一种是从SD card或者沙盒中加载!后两种用到的可能比较小,但是有些需求就必须要用到其他方式,比如加载用户的照片资源等等。。。
// 传统的加载asset目录下资源的方式
assetsBitmapTextureAtlas = new BitmapTextureAtlas(getTextureManager(), 128, 128);
assetsTextureRegion = (TextureRegion) BitmapTextureAtlasTextureRegionFactory.createFromAsset(assetsBitmapTextureAtlas,
this, "assets_image.png", 0, 0);
assetsBitmapTextureAtlas.load();
// 传统的加载res目录下资源的方式,但是res目录下的资源会生成索引
resBitmapTextureAtlas = new BitmapTextureAtlas(getTextureManager(), 128, 128);
resTextureRegion = (TextureRegion) BitmapTextureAtlasTextureRegionFactory.createFromResource(resBitmapTextureAtlas,
this, R.drawable.res_image, 0, 0);
resBitmapTextureAtlas.load();
这个用法很少,通常都是放在assets的目录下
(PS: 从沙盒中加载也是一样的原理,只是目录不同而已)
// 从SD card中加载资源,从沙盒中加载也是这个原理
File resFile = new File("/mnt/sdcard/storage_image.png");
sdBitmapTextureAlAtlas = new BitmapTextureAtlas(getTextureManager(), 128, 128);
FileBitmapTextureAtlasSource fileBitmapTextureAtlasSource = FileBitmapTextureAtlasSource.create(resFile);
sdTextureRegion = (TextureRegion) BitmapTextureAtlasTextureRegionFactory.createFromSource(sdBitmapTextureAlAtlas, fileBitmapTextureAtlasSource, 0, 0);
sdBitmapTextureAlAtlas.load();
其实原理很简单,AndEngine已经为我们提供了一个叫做FileBitmapTextureAtlasSource的类了,而继承关系是FileBitmapTextureAtlasSource继承于BaseTextureAtlasSource并且实现IBitmapTextureAtlasSource接口,有心的同学可能发现了,在BitmapTextureAtlasTextureRegionFactory的各种create**()方法中,传入的source参数都是实现于IBitmapTextureAtlasSource接口的。
简单介绍一下,想深入的同学继续看AndEngine源码吧!
附上我那弱弱的Demo源码,点击下载