当我们学习完第3、4节后,我么在来绘制第一张图片。
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"); //图片默认是用的assets目录下的文件
}
//重复渲染函数,一直执行,直到你调用this.dispose(),注意,如果使用Game类的setScene函数进行场景切换,
//这个类也仅仅是hide()隐藏了,还是会占用资源的,所以呢,切换场景之后是有必要dispose的
@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); //绘制在坐标(0,0)点,这个是屏幕坐标
batch.end();
}
//这是析构函数,释放
@Override
public void dispose () {
batch.dispose();
img.dispose();
}
}
下面是伪代码:
桌面程序启动:
package com.mygdx.game.desktop;
import com.Mario.game.MarioBros;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.mygdx.game.MyGdxGame;
import com.mygdx.game.MyTest;
public class DesktopLauncher {
public static void main (String[] arg) {
//生明分辨率为1280*720长宽的屏幕
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.width = 1280;
config.height =720;
new LwjglApplication(new MarioBros(), config);
}
}
”
增加如下代码
//浅蓝色本底
private static final Color BACKGROUND_COLOR = new Color(0.39f, 0.58f, 0.92f, 1.0f);
//这里使用了一个1/100的比例,相机的视距是屏幕的1/100,也就是说,相机的长宽比是屏幕的1/100,那么
//使用这个相机camera的话,里面的绘制工具的比例也是1/100
//世界与屏幕比例
private static final float WORLD_TO_SCREEN = 1.0f / 100.0f;
//屏幕宽度和高度,世界单位,指明相机的视距
private static final float SCENE_WIDTH = 12.80f;
private static final float SCENE_HEIGHT = 7.20f;
private OrthographicCamera camera;
private Viewport viewport;
private SpriteBatch batch;
private Texture cavemanTexture;
private Color oldColor;绘制了一张图了,对吧,但是问题来了。
我们为了适应各种屏幕,是要使用viewPort进行适配的,然后,使用一个叫camera的家伙搞出一个照相机视角,然后呢,就出现了一个叫做世界单位和屏幕单位即像素单位的转换。一看这个,百度一大堆讲解视角切换 ,矩阵变换,然后就是如何计算projection视角、view视角的东西了,我也很蒙圈。
说这么多,直接看图:
一)batch什么都没有更改,以左下角为(0,0)
二)batch不变,增加camera和viewport,起点以左下角为(0,0)
三)batch变了,使用的draw完整的函数。图片位置变了,这个就是-originX*1+300,-originY*1+300,作怪,也好解释,不就是右上上移动300像素,然后又左下移动一个originX、originY吗。
但是精彩又令人无语头疼的部分来了,请看下图,图片不见了。 WHY???还有更无语的..在第6节(由于太晚了,暂时写到这里)。,,,