libgdx学习之路(5) 第一个使用SpriteBatch绘制的图片 剖析1

当我们学习完第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)

libgdx学习之路(5) 第一个使用SpriteBatch绘制的图片 剖析1

 

二)batch不变,增加camera和viewport,起点以左下角为(0,0)

libgdx学习之路(5) 第一个使用SpriteBatch绘制的图片 剖析1

 

三)batch变了,使用的draw完整的函数。图片位置变了,这个就是-originX*1+300,-originY*1+300,作怪,也好解释,不就是右上上移动300像素,然后又左下移动一个originX、originY吗。

libgdx学习之路(5) 第一个使用SpriteBatch绘制的图片 剖析1

但是精彩又令人无语头疼的部分来了,请看下图,图片不见了。 WHY???还有更无语的..在第6节(由于太晚了,暂时写到这里)。,,,

libgdx学习之路(5) 第一个使用SpriteBatch绘制的图片 剖析1