LibGdx练习-像素鸟(四)

本文介绍使用LibGdx框架开发像素风格游戏“像素鸟”的过程,重点讲解了BaseScreen类作为屏幕基类的设计,包括其初始化、渲染和资源释放的方法。同时,深入探讨了LoadScreen类如何实现游戏资源的加载及展示加载界面,直至游戏准备就绪。

LibGdx练习-像素鸟(四)

screen基类

public class BaseScreen extends ScreenAdapter {
    protected Stage stage;
    protected MainGame game;
    public BaseScreen(MainGame game){
        this.game = game;
        stage = new Stage(new StretchViewport(
                game.getWorldWidth(),
                game.getWorldHeight()
        ));
    }

    @Override
    public void render(float delta) {
        super.render(delta);
        stage.act();
        stage.draw();
    }

    @Override
    public void dispose() {
        super.dispose();
        stage.dispose();
    }

    public MainGame getGame() {
        return game;
    }
}

BaseScreen类继承ScreenAdapter基类,自带一个stage对象和一个MainGame启动类对象。

类中重写了render方法和dispose方法,完成对于stage的绘制和释放。

加载界面

LoadScreen实现资源的加载,展示加载等待界面并在资源加载后转到游戏界面。

public class LoadScreen extends BaseScreen {

    private LoadGroup loadGroup;
    private Texture texture;
    private boolean isLoaded = true;

    public LoadScreen(MainGame mainGame){
        super(mainGame);
    }

    @Override
    public void show() {
//        获取加载等待界面图像
        AssetsUtil.getAssetManager().load("atlas/timg.gif",Texture.class);
        AssetsUtil.getAssetManager().finishLoading();
        texture = AssetsUtil.getAssetManager().get("atlas/timg.gif");
//        调用加载界面演员组展示界面
        loadGroup = new LoadGroup(getGame(),texture);
        loadGroup.setSize(Res.FIX_WORLD_WIDTH,Res.FIX_WORLD_HEIGHT);
//        添加演员到stage
        stage.addActor(loadGroup);
//        加载全部资源
        AssetsUtil.load();
    }

    @Override
    public void render(float delta) {
        super.render(delta);
//        资源加载完毕跳转到游戏界面
        if (AssetsUtil.update()&&isLoaded==true){
            AssetsUtil.loadFinished();
            getGame().setGameScreen(new GameScreen(getGame()));
            getGame().setScreen(getGame().getGameScreen());
            isLoaded = false;

        }
    }

    @Override
    public void dispose() {
        super.dispose();
        if (texture!=null){
            texture.dispose();
        }
    }
}

group基类

public class BaseGroup extends Group {
    protected MainGame mainGame;

    public BaseGroup(MainGame mainGame) {
        this.mainGame = mainGame;
    }

    public MainGame getMainGame() {
        return mainGame;
    }
}

没什么可说的,传进来一个MainGame实例。

LoadGroup

public class LoadGroup extends BaseGroup {

    public LoadGroup(MainGame mainGame, Texture texture) {
        super(mainGame);
        init(texture);
    }

    private Image loadImage;

    private void init(Texture texture) {
        loadImage = new Image(texture);
        loadImage.setSize(Res.FIX_WORLD_WIDTH,Res.FIX_WORLD_HEIGHT);
        addActor(loadImage);
    }
}

设置背景图片大小,并放到group中。此处主要是为了项目架构规整,我们完全可以不使用group直接把Image对象添加到stage中展示出来即可。

texture = AssetsUtil.getAssetManager().get("atlas/timg.gif");
image = new Image(texture);
stage.addActor(image);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值