系列:libgdx编写游戏(4)——编写基础组件Stage,Button


注:由于教程为基础教程所以操作均在继承ApplicationAdapter的默认类里面完成。

Stage(舞台组件):

用于添加对象,控制输入,是游戏的核心。

定义和使用:

Stage stage;//定义舞台
………………
……{//creat或者show中
…………
stage = new Stage(new StretchViewport(800, 480));//创建舞台
Gdx.input.setInputProcessor(stage);//设置输入处理器
stage.add(…………);//添加组件
…………
}
……{//render中
stage.act();
stage.draw();
}

舞台还可以设置其他类型的视口(Viewports),摄像机(Camer)(限于篇幅以后再讲)。舞台大小可以超过窗口大小,在有多个舞台或者输入处理器时应该采用以下方式添加:

 InputMultiplexer inputMultiplexer= new InputMultiplexer();//创建一个InputMultiplexer实例
        Gdx.input.setInputProcessor(inputMultiplexer);//将inputMultiplexer设置为输入处理器
        inputMultiplexer.addProcessor(stage);//添加舞台作为输入处理器
inputMultiplexer.addProcessor(stage1);//添加舞台作为输入处理器
………………

顺带一提,舞台类(stage)和画布类(batch)在render里面的顺序会影响重叠时的优先度,一般先进行batch的操作再继续stage的操作。

Button(按钮组件):

主要用于点击事件,一般使用BouttonStyle构建,位置可以重叠,多个按钮重叠时取最上面一个按钮事件。

定义:

Button button;//定义按钮
Button.ButtonStyle buttonStyle;//定义风格
………………
……{//creat或者show中
…………
buttonStyle= new Button.ButtonStyle();//创建风格对象
imageUp = new Texture("ButtonUp.png");//创建纹理对象
imageOver = new Texture("ButtonOver.png");//创建纹理对象
imageDown = new Texture("ButtonDown.png");//创建纹理对象
buttonStyle.up = new TextureRegionDrawable(newTextureRegion(imageUp));//设置按钮没有被触摸和点击时的图像
buttonStyle.over = new TextureRegionDrawable(new TextureRegion(imageOver));//设置按钮触摸时图像
buttonStyle.down = new TextureRegionDrawable(new TextureRegion(imageDown));//设置按钮按下时图像
button=new Button(buttonStyle)//创建按钮
stage.add(button);//在舞台中添加对象
…………
}

创建按钮时可以根据需要修改buttonStyle,其中over属性是不必要的。而up和down是必要的(纹理对象可以相同)。

添加事件:

//在创建时添加
button.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
            ………………//这里写按下按钮后会发生什么,比如图片变换,窗口变换,Screen变换等等
            }
        });

也可以不添加,不添加就不会产生事件。

其他属性:

button.setPosition(100, 200);//设置在舞台(stage)中的位置
button.setStyle(buttonStyle);//换一个ButtonStyle,按钮大小可以通过修改TextureRegionDrawable的大小来进行修改 。
button.setDisabled(false);//是否可用
button.setVisible(true);//是否可见

这些方法可用可不用,如果采用非style创建的button的话,需要调用setStyle来进行设置。

结语:

在使用stage和button时记得要注意实参和形参的区别。千万不要在render外调用stage的act,draw等方法。


发表回复

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