LibGdx学习过程(三)Texture纹理的简单使用
创建一个简单的纹理对象
package com.mygdx.game;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
@Override
public void create () {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(img, 0, 0);
batch.end();
}
@Override
public void dispose () {
batch.dispose();
img.dispose();
}
}
以上是MyGdxGame类中的默认代码,最为core包下的主类,他默认给我们创建了一个batch也就是一个画板。
画板,故名思意,我们需要在屏幕上创建一块画板才能在画板上面进行我们游戏界面的配置。
Texture纹理,在学习的过程中纹理这个翻译方式让我很迷,我更倾向于把他看作一个图形对象。
在项目创建的过程中在Android/assets目录下默认拥有一张背景图片badlogic.jpg
在MyGdxGame类中默认创建了这张图片的纹理对象。
Texture img;
img = new Texture("badlogic.jpg");
使用非常简单,直接new即可。
在观察创建的画板和纹理对象的同时,我们发现MyGdxGame继承了ApplicationAdapter类,这个类的作用就是封装了对于游戏界面的创建/渲染以及资源释放函数。
当然它所封装的函数和功能不止如此,但这个三个函数是最重要且不可或缺的,我们先从他们来入手。
先说create函数,它负责游戏的初始化操作,对于画板/纹理以及之后我们接触的其他组件需要在此处进行实例化,这里将会完成我们所需要在游戏开始出现的所有元素的展示和逻辑搭建。
render函数负责游戏渲染,在游戏程序启动后他会不断的依据一定的帧率来重复执行。
在render函数中有这样两行代码
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
这两行代码的作用是清屏。
第一行的作用是设计清屏颜色,第二行代码是执行清屏。
让我们看一下他们的效果
整一个红色的屏幕对吧,因为在设置清屏颜色的部分前三个参数是根据红色绿色和蓝色三种颜色来配置屏幕颜色(1,0,0)对应的自然是正红色。至于最后一个参数设置的透明度(alpha)。
dispose函数负责资源的释放,因为在程序搭建的过程中需要调用很多的本地资源和程序内资源。在很多的时候Java本身的垃圾回收机制并不能完美的判定哪些资源已经使用完毕,哪些资源还会调用,这个时候就需要我们手动的进行资源的释放。
那么具体哪些资源需要手动释放呢,简单的说所有实现了Disposable类具备dispose()方法的组件全部需要在dispose函数内进行手动的资源释放。
ok,说完了三个关键性的函数,让我们看看效果
可以看到这张图片已经出现在我们的图片上了。
纹理和画板的参数使用
Texture作为一个基础类提供给我们的函数并不是很多,比较常用有
img.getWidth();
img.getHeight();
用以获取Texture的宽高,如果需要更加快捷好用操作建议使用Texture的功能扩展类,如Image
Image image = new Image(img);
使用Texture作为参数即可获得Image对象
在Image对象中即可使用更多的对于图像的处理操作,比如
image.setSize(350,600);
image.setPosition(20,50);
两行代码分别用以设置纹理的大小和位置。
注意:libgdx采用笛卡尔坐标系,以左下角为原点。
可以看到,图片已经根据我们的配置进行了改变。
需要注意,Image和batch使用的是不同的方法进行绘制。
batch绘制时的参数分别为Texture和横纵坐标,Image绘制时使用的是batch和透明度。
//画板绘制
batch.draw(img, 100, 100);
//Image绘制
image.draw(batch,1);
后续还会有更多的绘制方式,因为我们在游戏设计中会使用很多的图像来进行画面渲染,一个一个进行绘制不管是batch还是Image都过于麻烦和不好编写。