您的位置:首页 > 其它

四,主要菜单界面的创建

2015-11-03 23:44 381 查看
package com.hj.lee.game.screens;

import static com.badlogic.gdx.scenes.scene2d.actions.Actions.delay;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.moveBy;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.sequence;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.utils.viewport.StretchViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
import com.hj.lee.game.DirectedGame;
import com.hj.lee.game.assets.Assets;
import com.hj.lee.game.assets.Constants;
import com.hj.lee.game.assets.GamePreferences;
import com.hj.lee.game.screens.actor.ButtonActor;
import com.hj.lee.game.screens.actor.RadioActor;
import com.hj.lee.game.screens.transitions.ScreenTransition;
import com.hj.lee.game.screens.transitions.ScreenTransitionFade;
import com.hj.lee.game.utils.AudioManager;
import com.hj.lee.game.utils.GameObject;

/**
* @author lee
*游戏刚进入时的主菜单界面
*/
public class MenuScreen extends AbstractGameScreen {
public static final String TAG = MenuScreen.class.getName();
boolean audioIsVisible = false;
Stage stage;
SpriteBatch batch;
Viewport viewport;
Image bgImage;
ButtonActor playButton;
ButtonActor optionsButton;
RadioActor sound;
RadioActor music;
BitmapFont fnt;

public MenuScreen(DirectedGame game) {
super(game);
batch = new SpriteBatch();
viewport = new StretchViewport(Constants.SCREEN_PIXEL_WIDTH, Constants.SCREEN_PIXEL_HEIGHT);
stage = new Stage(viewport);
fnt = Assets.instance.fnt.bitmapFont;
buildStage();
}

private void buildStage() {
// TODO Auto-generated method stub
loadSettings();
bgImage = new Image(new TextureRegionDrawable(Assets.instance.atlas_ui.findRegion(Assets.background)));
initAudioActors();
initControls();
stage.clear();
stage.addActor(bgImage);
stage.addActor(playButton);
stage.addActor(optionsButton);
stage.addActor(music);
stage.addActor(sound);
Gdx.input.setInputProcessor(stage);
}

private void initAudioActors() {
// TODO Auto-generated method stub
sound = new RadioActor(new TextureRegionDrawable(Assets.instance.atlas_ui.findRegion(Assets.soundOn)), new TextureRegionDrawable(
Assets.instance.atlas_ui.findRegion(Assets.soundOff)), new GameObject(590, 0 - 70, 70, 70), GamePreferences.instance.sound);
sound.addListener(new ActorGestureListener() {
public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
sound.touchDown();
sound.changeDrawable(!GamePreferences.instance.sound);
GamePreferences.instance.sound = !GamePreferences.instance.sound;
}

public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
sound.touchUp();
saveSettings();
}
});
music = new RadioActor(new TextureRegionDrawable(Assets.instance.atlas_ui.findRegion(Assets.musicOn)), new TextureRegionDrawable(
Assets.instance.atlas_ui.findRegion(Assets.musicOff)), new GameObject(520, 0 - 70, 70, 70), GamePreferences.instance.music);
music.addListener(new ActorGestureListener() {
public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
music.touchDown();
music.changeDrawable(!GamePreferences.instance.music);
GamePreferences.instance.music = !GamePreferences.instance.music;
}

public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
music.touchUp();
saveSettings();
}
});
}

void initControls() {
playButton = new ButtonActor(new TextureRegionDrawable(Assets.instance.atlas_ui.findRegion(Assets.play)), new GameObject(800 - 130, 130, 130, 130),
1.2f);
playButton.addListener(new ActorGestureListener() {
public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
playButton.touchDown();
}

public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
playButton.touchUp();
onPlayClicked();
}
});
optionsButton = new ButtonActor(new TextureRegionDrawable(Assets.instance.atlas_ui.findRegion(Assets.options)), new GameObject(800 - 130, 0, 130, 130),
1.2f);
optionsButton.addListener(new ActorGestureListener() {
public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
optionsButton.touchDown();
// saveSettings();
}

public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
onOptionsClicked();
optionsButton.touchUp();
}

});
}

protected void onPlayClicked() {
// TODO Auto-generated method stub
ScreenTransition transition = ScreenTransitionFade.init(0.3f);
game.setScreen(new LevelScreen(game), transition);
//dispose();
}

protected void onOptionsClicked() {
// TODO Auto-generated method stub
showAudioButtons(audioIsVisible);
if (audioIsVisible) {
audioIsVisible = false;
} else {
audioIsVisible = true;
}
}

private void showAudioButtons(boolean visible) {
// TODO Auto-generated method stub
Interpolation moveEasing = Interpolation.swing;
float delay = 0.25f;
float duration = 0.5f;
float moveX = 0 * (visible ? -1 : 1);
float moveY = 70 * (visible ? -1 : 1);
sound.addAction(moveBy(moveX, moveY, duration, moveEasing));
music.addAction(sequence(delay(delay), moveBy(moveX, moveY, duration, moveEasing)));
}

private void loadSettings() {
GamePreferences prefs = GamePreferences.instance;
prefs.load();
}

private void saveSettings() {
GamePreferences prefs = GamePreferences.instance;
prefs.save();
AudioManager.instance.onSettingsUpdated();
}

@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
viewport.setScreenSize(width, height);
}

@Override
public void show() {
// TODO Auto-generated method stub

}

@Override
public void hide() {
// TODO Auto-generated method stu

}

@Override
public void pause() {
// TODO Auto-generated method stub

}

@Override
public void dispose() {
// TODO Auto-generated method stub
stage.dispose();
batch.dispose();
}

@Override
public void render(float deltaTime) {
// TODO Auto-generated method stub
stage.act(deltaTime);
stage.draw();
batch.setProjectionMatrix(stage.getCamera().combined);
batch.begin();
batch.draw(Assets.instance.atlas_ui.findRegion(Assets.app_name_background), 15,
Constants.SCREEN_PIXEL_HEIGHT - Assets.instance.atlas_ui.findRegion(Assets.app_name_background).getRegionHeight() - 10);
fnt.setColor(Color.OLIVE);
fnt.draw(batch, "STUPID ZOMBIES", 30, 350);
batch.end();
}

@Override
public InputProcessor getInputProcessor() {
// TODO Auto-generated method stub
return stage;
}

}




[align=left]主界面包含一些简单的按钮,使用了libgdx中的stage。
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息