1. 概述
    舞台(Stage)是众多演员(Actor)“表演”的地方,可以看做是一个包含不同层次演员的 2D 场景,能够处理视口(整体缩放显示 / 屏幕适配)和 接收输入事件(触屏,鼠标点击,按键按下等)自己处理以及将事件分发给演员。

  2. 舞台类(Stage)
    舞台类中的部分方法:

float getWidth(): 获取舞台的宽度
float getHeight(): 获取舞台的高度
void act(float delta): 更新舞台逻辑,并批处理舞台中的演员(自动逐个调用演员的 act() 方法更新演员逻辑)
void draw(): 绘制舞台,并批处理舞台中的演员(自动逐个调用演员的 draw() 方法绘制演员)
void dispose() : 释放舞台中的所有资源
boolean addListener(EventListener listener): 添加事件监听到舞台
boolean removeListener(EventListener listener): 移除监听器
void addActor(Actor actor): 增加一个演员到舞台中
void clear(): 移除舞台中的所有演员
Array getActors(): 获取舞台中的所有演员
Group getRoot(): 获取舞台中维护所有演员的演员组
Group: 演员组,它也继承了 Actor,也是一个演员,舞台中维护了一个 Group 对象,添加到舞台中的演员其实最终添加到了 Group 中,舞台类中有增加演员的方法,但没有移除单个演员的方法,如果需要移除某个演员,需要调用 stage.getRoot() 方法先获取到舞台的 Group 对象,然后调用 Group 对象的 group.removeActor(actor) 方法。

  1. 代码示例
    这里引用前面章节中自定义的演员:

    
    package com.libgdx.test;

import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Actor;

/**

  • 自定义演员
    */
    public class MyActor extends Actor {

    private TextureRegion region;

    public MyActor(TextureRegion region) {
    super();
    this.region = region;
    setSize(this.region.getRegionWidth(), this.region.getRegionHeight());
    }

    public TextureRegion getRegion() {
    return region;
    }

    public void setRegion(TextureRegion region) {
    this.region = region;
    setSize(this.region.getRegionWidth(), this.region.getRegionHeight());
    }

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

    @Override
    public void draw(Batch batch, float parentAlpha) {
    super.draw(batch, parentAlpha);
    if (region == null || !isVisible()) {
    return;
    }
    batch.draw(
    region,
    getX(), getY(),
    getOriginX(), getOriginY(),
    getWidth(), getHeight(),
    getScaleX(), getScaleY(),
    getRotation()
    );
    }

}

游戏主程序的启动入口类:

package com.libgdx.test;

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.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Stage;

/**

  • 游戏主程序的启动入口类
    */
    public class MainGame extends ApplicationAdapter {

    // 纹理
    private Texture texture;

    // 自定义的演员
    private MyActor actor;

    // 舞台
    private Stage stage;

    @Override
    public void create() {
    // 创建纹理, badlogic.jpg 图片的宽高为 256 * 256
    texture = new Texture(Gdx.files.internal("badlogic.jpg"));
    // 创建演员, 位置默认为为 (0, 0), 在舞台左下角
    actor = new MyActor(new TextureRegion(texture));

    // 使用默认的构造方法创建舞台, 宽高默认为屏幕宽高
    stage = new Stage();
    
    // 将 演员 添加到舞台中, 由舞台去更新演员的逻辑和绘制
    stage.addActor(actor);

    }

    @Override
    public void render() {
    // 黑色清屏
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    /*
     * 舞台自己维护了纹理画布(SpriteBatch), 并且在绘制前后自动分别调用了 begin() 和 end() 方法,
     * 所以渲染舞台时, 只需要调用舞台的 act() 和 draw() 方法即可
     */
    
    // 更新舞台逻辑,并批处理舞台中的演员(自动逐个调用演员的 act() 方法更新演员逻辑)
    stage.act();
    
    // 绘制舞台,并批处理舞台中的演员(自动逐个调用演员的 draw() 方法绘制演员)
    stage.draw();

    }

    @Override
    public void dispose() {
    // 释放纹理资源
    if (texture != null) {
    texture.dispose();
    }
    // 释放舞台资源
    if (stage != null) {
    stage.dispose();
    }
    }

}


运行结果:
--------------------- 
作者:xietansheng 
来源:CSDN 
原文:https://blog.csdn.net/xietansheng/article/details/50187111 
版权声明:本文为博主原创文章,转载请附上博文链接!

发表评论

邮箱地址不会被公开。 必填项已用*标注