libgdx:[34]资源检测
测试一下我们加载的资源是否已经正确的加载并能够正常的使用。
工具/原料
libgdx
Testing assets 检测资源
1、我们现在已经准备好检测一下我们已经在Assets类中创建的代码是否能够正常的工作呢。CanyonBunnyMain类中添加下面的代码import com.badlogic.gdx.assets.AssetManager;import com.packtpub.libgdx.canyonbunny.game.Assets;
![libgdx:[34]资源检测](https://exp-picture.cdn.bcebos.com/d47cb624d8e9ccd2a08363ea0e40102a05e2c97b.jpg)
2、在那之后我们通过对下面代码的改动来 下载 重载 卸载我们的资源:@Overridepublic void create () {// Set Libgdx log level to DEBUGGdx.app.setLogLevel(Application.LOG_DEBUG);// Load assetsAssets.instance.init(new AssetManager());// Initialize controller and rendererworldController = new WorldController();worldRenderer = new WorldRenderer(worldController);}@Overridepublic void resume () {Assets.instance.init(new AssetManager());paused = false;}@Overridepublic void dispose () {worldRenderer.dispose();Assets.instance.dispose();}
3、在creat()方法中,我们初始化了一个新的AssetManager 对象并把他传宕蜉窑煜递给Assets 类的init()方法.注意我们在WorldController 创建之前初始化AssetManager 以便我们的资源已经被加载并准备好被调用.记住一个实例已经存在并可以直接通过实例变量被调用.在resume()方法中我们做的事情跟在creat()中做的完全一样;在android中可能会出现的上下文丢失的情况要求我们在resumed (重启)时重载资源.最后是在dispose()方法中,我们调用Assets类的dispose()方法,他将依次调用所有的instance中的资源的dispose()方法,释放资源.
![libgdx:[34]资源检测](https://exp-picture.cdn.bcebos.com/3fe32442a07aa01098d6de8bbfbb19efa35f3e78.jpg)
4、The fial change will be to replace our test sprites with the ones from the textureatlas.最后的更改就是用我们的一个纹理图替换我们的 测试精灵们(test sprites)向WorldController类添加如下代码:import com.badlogic.gdx.graphics.g2d.TextureRegion;import com.badlogic.gdx.utils.Array;
![libgdx:[34]资源检测](https://exp-picture.cdn.bcebos.com/18aebc5f0c14c27bf967b43a2a46b7b1eff93978.jpg)
5、在代码中实现如下更改:private void initTestObjects (拘七呷憎) {// Create new array for 5 spritestestSprites = new Sprite[5];// Create a list of texture regionsArray<TextureRegion> regions = new Array<TextureRegion>();regions.add(Assets.instance.bunny.head);regions.add(Assets.instance.feather.feather);regions.add(Assets.instance.goldCoin.goldCoin);// Create new sprites using a random texture regionfor (int i = 0; i < testSprites.length; i++) {Sprite spr = new Sprite(regions.random());// Define sprite size to be 1m x 1m in game worldspr.setSize(1, 1);// Set origin to sprite's centerspr.setOrigin(spr.getWidth() / 2.0f,spr.getHeight() / 2.0f);// Calculate random position for spritefloat randomX = MathUtils.random(-2.0f, 2.0f);float randomY = MathUtils.random(-2.0f, 2.0f);spr.setPosition(randomX, randomY);Chapter 4[ 133 ]// Put new sprite into arraytestSprites[i] = spr;}// Set first sprite as selected oneselectedSprite = 0;}
![libgdx:[34]资源检测](https://exp-picture.cdn.bcebos.com/a007a9b1eef97fbd7d990600b74133bad2413378.jpg)
6、我们任然跟前面的initTestObjects()中一样创建5个sprite,不同的是我们用兔子的头羽毛金币来创建sprite。使我们的sprite比实际尺寸小一点我们创建了一个动态的数组叫做regions里面存储着我们要用到的所有region然后在设置loop中我们创建了一个sprite实例用随机取出的region充当其成员,
![libgdx:[34]资源检测](https://exp-picture.cdn.bcebos.com/32fbcd41037de137f193100ff6c5cf672a5f2a78.jpg)
7、你现在可以运行一下游戏测试一下。下面的截屏展示的是我们建立的随机情况中可能出现的一个情况。
![libgdx:[34]资源检测](https://exp-picture.cdn.bcebos.com/c3c22dbf3bef354f195d868d23db574afb321b78.jpg)
8、正如你看到的我们让debug轮廓线保持可用,你可以简单的更改drawDebugOutlines的值把它设为不可用。不要忘记把rebuildAtlas设置为true 这样桌面项目才能重新打包纹理图片。
9、有些时候呢,你更改了textureatlas但是并没有出现任何的影响。如果出现这种情况,Eclipse可能没有发现你做的更改,因此并没有重构projectbinaries二进制项目,(编译的项目)。有些时候可能重启一下游戏就会好啦。另外还可以通过Project|Clean...来重新编译一下项目。
![libgdx:[34]资源检测](https://exp-picture.cdn.bcebos.com/560be432939c2cf78f57eeaa452c5b1b1fde1278.jpg)
10、太棒了,现在我们已经有了一个非常cool的游戏界面啦,并且我们任然可以使用我们之前创建的功能,就像移动相机,选择对象并移动他们,或者跟随选择的对象,或者缩放。
![libgdx:[34]资源检测](https://exp-picture.cdn.bcebos.com/f59dbe39131fceec8a3c5bc679c4ec9958430b78.jpg)