美文网首页libgdx专题Android开发经验谈Android知识
Android应用libGDX引擎系列(二)-libGDX 入门

Android应用libGDX引擎系列(二)-libGDX 入门

作者: AlexueQ | 来源:发表于2016-08-02 16:41 被阅读3599次

by AlexQ (email alexq_andr@163.com

图片名称
  • 启动gdx-setup.jar


    图片名称
  • Android需要配置SDK,执行“Generate”


    图片名称
  • AndroidStudio Open 文件夹


    图片名称
  • Run


    图片名称
  • Code预览:

        public class AndroidLauncher extends AndroidApplication {
        @Override
        protected void onCreate (Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
            initialize(new MyGdxGame(), config);
            }
        }
    
        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();
            }
        }
    

    Core

    libGDX 图形绘制

    主要学习四个类:SpriteBatch、Texture 、TextureRegion 、 Sprite
    
    1. Texture 类
    * 定义:图片从原始格式解码并上传到GPU就被称为纹理。
    
    * 功能:其实就是承装获取到目标图片的容器。
    
    * helloworld中有加载图片的事例:
    
        ```
            new Texture("badlogic.jpg");
        ``` 
    
    2. SpriteBatch 类
    * 定义:SpriteBatch用于绘制二维矩形参考纹理(区域)。SpriteBatch类可用于批量绘图命令和优化处理的GPU。
    
    * 功能:SpriteBatch可以把许多相同纹理一起描述并一起送入GPU,同时赋予纹理和坐标以便每个图形的绘制。-------------SpriteBatch可以理解为画笔。
    * helloworld中有加载图片的事例:
        ```
            SpriteBatch batch;
            ...
            public void render () {
                batch.begin();
                batch.draw(img, 0, 0);
                batch.end();
            }
        ``` 
    
    3. TextureRegion 类
    * API定义:定义了一个矩形区域的纹理。使用的坐标系统与x轴指向右,Y轴向下在左上角的起源。
    
    * 功能用途:实际操作中我们也经常使用图片的一部分,或者将多个图片资源集合在一个图片文件中。而要显示图片的一部分就可以使用TextureRegion类。
    
    4. Sprite 类
    * API定义:持有的几何形状,颜色,和纹理信息使用加载绘制2D精灵。一个精灵有定位和给定的宽度和高度尺寸。
    * 功能用途:TextureRegion的加强版,比TextureRegion多了一些功能,如:可以指定位置、颜色、旋转等。
    
        **其实Sprite的功能就是以上的集合。但是Sprite更方便,它用一个对象描述了一切,但是同时加入了很多TextureRegion和Texture没有的东西,如位置、颜色、旋转.**
    

    libGDX 舞台和演员

    1. 舞台 Stage类
    • 定义:包含拥有层次结构的一个二维场景,场景中有许多演员。处理视图和分配输入事件。舞台负责操作视角,和处理分配输入事件。

    • 功能:一个Stage可以充满整个屏幕。设置视角(一般是浮点型和布尔类型),同时设置使用的相机,调配 Actor、Group 与 Screen 之间的关系转换(包括坐标)。一个Stage必须负责接收输入事件,同时将它分配给演员。这通常是通过Stage的gdx.input.setinputprocessor来实现。一个inputmultiplexer可用来处理输入事件的不同阶段,即之前或之后。如果一个演员从输入的方法中处理一个事件而返回TRUE,那么Stage的输入方法也会返回true,导致随后的inputprocessors不接收事件。

    • 使用方法:Stage(float width, float height, boolean keepAspectRatio, SpriteBatch batch)

      (1)第一个参数:设置舞台的宽度。

      (2)第二个参数:设置舞台的高度。

      (3)第三个参数:是负责是否让舞台铺满屏幕,如果这个值是ture的话,舞台的尺寸就是你设置的大小。如果是false的话,就铺满屏幕。

      (4)第四个参数:就是传入你所声明的Spirtibatch。

    2. 演员 Actor类
    • 定义:在二维场景图中,一个演员拥有位置,矩形的大小,起点,规模,旋转,和颜色等属性。演员的位置是相对于演员的父母,它的起点是相对位置,同时可用于缩放和旋转。一个演员也有一个行动,可以加入监听来实现演员接收事件通知。

    • 功能:演员类是一个项目中的基本元素,libgdx中演员封装了许多有用的方法,比较常用的有draw、addlistrener、fire、addaction等等。

    3. 舞台和演员的概念很好的抽象了游戏中的元素概念,实现了同一场景不同演员随意配置切换,以及同一演员出现在不同场景。

    libGDX 音效

    1. Audio 接口

    支持格式:mp3、ogg、wav等。

    public interface Audio {
       public Sound newSound(FileHandle fileHandle);
       public Music newMusic(FileHandle file);
       public AudioDevice newAudioDevice(boolean isMono);
    }
    
    2. Sound 接口
    • Sound(声音)类旨在播放声音效果
    • 定义:短音频的剪辑,可以实现多次播放。它是完全加载到内存的,并且只负责加载小的音频文件。当使用音频结束后,调用dispose方法来销毁。
    • 支持格式:支持wav格式,不支持ogg格式。
    Sound  sound = Gdx.audio.newSound(Gdx.files.internal("sound.wav"));
    sound.setLooping(true);
    sound.play();
    sound.setVolume(15);
    
    3. Music 类
    • 定义:一段长音频的剪辑,可以在实现多次播放。它是部分被装载到内存的,并且只负责加载大的音频文件。当该音频使用结束后,调用dispose方法来销毁。
    • 支持格式:支持MP3 OGG WAV等格式。
    Music music = Gdx.audio.newMusic(Gdx.files.internal("xxx.ogg"));
    music.setLooping(true);
    music.setVolume(15);
    music.play();
    

    libGDX 资源加载器

    AssetManager 类 负责加载类似于 textures, bitmapfonts, tile maps, sounds, music 等类型的文件。
    API

    (1)clear() 方法:清空和删除所有已加载资源和预加载队列。

    (2)containsAsset(T asset) :返回的是一个布尔类型,检测是否加载了否个资源。

    (3)finishLoading() : 所有资源加载完成后,结束加载资源,也可以手动设置加载到某一项结束加载。

    (3)getAssetFileName(T asset) :获取资源名字,得到的是一个String类型的文件。

    (4)getLoadedAssets() :获取已经加载的资源数量。

    (5)getProgress() :获取加载进度,返回一个0 - 1之间的小数,这个一般可以用作制作进度条。

    (6)isLoaded(java.lang.String fileName) :返回的是一个布尔类型,检测你传入的文件是否已经被加载了,一般使用的if判断语句中。

    (7)load(java.lang.String fileName, java.lang.Class type) :将已传入的文件名和类型加入到预加载队列,为了防止名字和类型重复,这里需要将名字和类型都传入,常用。

    (8)setLoader(java.lang.Class type, AssetLoader loader) :设置加载器,其实AssetManager类中包装了需要Assetloader对象,这样才能完成不同类型的文件的加载,当然AssetManager也可以加入加载器。

    (9)unload(java.lang.String fileName) :卸载资源,如果某个资源不使用了,就可以卸载该资源,这样有利于游戏流畅性。

    (10)update():加载资源,实际上Load方法其实只是将预加载的资源加载到了预加载队列,实质上并没有加载资源,使用update()方法才会加载资源,调用该方法才能,使不断加载那写储存在预加载对了中的资源。

    功能优点:(官方翻译)

    (1)加载大部分资源采用异步加载的方式,这样就能在加载的同时不阻塞渲染进程.

    (2)实现了引用计数,当A和B都依赖C素材的时候,C只有在A,B都销毁了才会销毁.这也意味着即使一个资源加载了很多次,在内存中也之后一份.

    (3)使用一个单一管理器来实现管理所有素材.

    (4)可以实现加载素材时占用的系统内存。

    libGDX Particle (粒子效果&粒子编辑器)

    关于这个例子编辑器,个人推荐看看我下面提到的视频,里面有专门讲粒子编辑器使用的课程,比较直观。

    图片名称

    官方网站上对软件中的各个参数的解释如下:

    • Delay: 当粒子系统开始后,发射器等待多少时间开始发射
    • Duration:发射器生存跨度,也就是粒子效果持续的的时间,注意这个时间和粒子生存时间不同
    • Count: 顾名思义,同一时间可出现的粒子个数,有一个上限一下下限。
    • Emission: 每秒钟发射多少个粒子,这个参数带了一张图表,图表中间写着duration,代表图表X 轴表示发射器生存时间,意思是说发射器的生存时间内,该图表控制各个时间点粒子每秒钟发射多少个,左边的上下两个文本框用于控制生成初始值时的范围,左边的'>'字符用于输入另外一个数值,比如说下面那个”>“, 发射器会在这两个值中间选择一下随机值作为上限值,Relative,如果选中,表示图表中的值是相对值,相对于初始值。否则是个绝对值.
    • Life: 一个粒子的生存时间,
    • Life Offset: 决定粒子在显示之前已经用掉它生命多少值 ,这样可以实现让一个粒子在它生命50%时再显现
    • X Offset and Y Offset: 粒子出现在位置相对中心位置的像素偏移
    • Spawn: 用于产生粒子的发射器的形状
    • Spawn Width and Spawn Height: 发射器的形状的宽,高
    • Size: 粒子的大小
    • Velocity:
    • Angle:
    • Rotation:
      这个几值用于控制粒子的运动轨迹:
    • Wind and Gravity: 烟为生存时间内在X轴和Y轴上每秒种的像素偏移值
    • Tint: 粒子的颜色,可以在粒子生存期内变化任意多个颜色
    • Transparency:粒子的透明度

    推荐

    1. 书目
      libGDX游戏开发入门指南


      image
    2. 网址

    3. 视频教程
      libGDX开发教程-奋斗小土豆


    相关文章

    网友评论

      本文标题:Android应用libGDX引擎系列(二)-libGDX 入门

      本文链接:https://www.haomeiwen.com/subject/chofsttx.html