ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

libGDX游戏开发之画面场景和画面自适应(二)

2021-10-04 18:07:17  阅读:256  来源: 互联网

标签:场景 badlogic gdx libGDX 画面 game import com public


libGDX游戏开发之画面场景切换(二)

libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm…国内用libgdx比较少,多数情况需要去官网和google找资料,相互学习的可以加我联系方式,仅限学习。

游戏开发需要切换各种场景,例如开始画面、游戏画面、gameover画面。
libGDX的字体样式默认不支持中文,需要自己创建。
Hiero工具下载地址:https://hub.fastgit.org/libgdx/libgdx/wiki/Hiero

创建游戏

import com.badlogic.gdx.Game;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

/**
 * @author lingkang
 * @date 2021/10/4 15:34
 * @description 创建一个游戏 作为起点
 */
public class MyGame extends Game {
    // 用于屏幕自适应的长宽
    public static final int VIEW_WIDTH = 624;
    public static final int VIEW_HEIGHT = 624;

    // 用于此game特有,方便game回收管理
    public SpriteBatch batch;
    public BitmapFont font;

    @Override
    public void create() {
        //游戏创建的一些准备放这里...
        batch = new SpriteBatch();
        font = new BitmapFont();
        font.setColor(Color.RED);

        // 进入欢迎页面
        setScreen(new WelcomeScreen(this));
    }
    // 其他的一些方法

    @Override
    public void dispose() {
        super.dispose();
        // 防止内存泄露
        batch.dispose();
        font.dispose();
    }
}

创建欢迎画面

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.utils.viewport.Viewport;

/**
 * @author lingkang
 * @date 2021/10/4 15:35
 * @description 欢迎页面
 */
public class WelcomeScreen implements Screen {
    // 将游戏对象传入
    private MyGame game;
    // 画面自适应
    private Viewport viewport;
    // 类似 javafx 的 Stage 我们绘制的画面在它上面
    private Stage stage;

    public WelcomeScreen(MyGame game) {
        this.game = game;

        viewport = new FitViewport(MyGame.VIEW_WIDTH, MyGame.VIEW_HEIGHT, new OrthographicCamera());
        // 下面我们用 Stage 固定方式绘制画面
        stage = new Stage(viewport, game.batch);

        // 字体样式 默认不支持中文,下面我就用英文了 https://hub.fastgit.org/libgdx/libgdx/wiki/Hiero
        Label.LabelStyle font = new Label.LabelStyle(new BitmapFont(), Color.WHITE);

        // 创建一个表格
        Table table = new Table();
        table.center();
        table.setFillParent(true);

        table.add(new Label("welcome", font)).expandX();
        table.row();
        table.add(new Label("Any click join game", font)).expandX().padTop(10f);

        stage.addActor(table);
        // 不同页面的帧率不同,有利于性能优化
        Gdx.graphics.setForegroundFPS(3);
    }

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        // 使用类似 javafx 的绘制方式
        stage.draw();
        if (Gdx.input.isTouched()) {
            game.setScreen(new GameScreen(game));
            dispose();
        }
    }

	// 其他实现方法
}

游戏战斗画面

/**
 * @author lingkang
 * @date 2021/10/4 17:20
 * @description
 */
public class GameScreen implements Screen {
    // 将游戏对象传入 方便操作
    private MyGame game;

    public GameScreen(MyGame game) {
        this.game = game;
        // 不同页面的帧率不同,有利于性能优化,这是游戏战斗页面,帧率调高
        Gdx.graphics.setForegroundFPS(38);
    }

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        ScreenUtils.clear(225, 225, 225, 1);

        game.batch.begin();
        game.font.draw(game.batch, "Welcome to Game Screen!!! ", 100, 150);
        game.font.draw(game.batch, "Any click to game over", 100, 100);
        game.batch.end();
        if (Gdx.input.isTouched()) {
            game.setScreen(new GameOverScreen(game));
            dispose();
        }
    }

// 其他实现方法
}

游戏结束画面

/**
 * @author lingkang
 * @date 2021/10/4 17:20
 * @description
 */
public class GameOverScreen implements Screen {
    // 将游戏对象传入 方便操作
    private MyGame game;

    public GameOverScreen(MyGame game) {
        this.game = game;
        // 不同页面的帧率不同,有利于性能优化
        Gdx.graphics.setForegroundFPS(3);
    }

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        ScreenUtils.clear(225, 225, 225, 1);

        game.batch.begin();
        game.font.draw(game.batch, "Welcome to Game Over Screen!!! ", 100, 150);
        game.font.draw(game.batch, "Any click to Welcome Screen", 100, 100);
        game.batch.end();
        if (Gdx.input.isTouched()) {
            game.setScreen(new WelcomeScreen(game));
            dispose();
        }
    }
}

效果如下:
在这里插入图片描述
层级区分官网也有例子:
https://libgdx.com/dev/simple-game-extended/

标签:场景,badlogic,gdx,libGDX,画面,game,import,com,public
来源: https://blog.csdn.net/weixin_44480167/article/details/120604406

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有