package org.test;
import loon.LObject;
import loon.LSystem;
import loon.LTransition;
import loon.Screen;
import loon.action.ActionBind;
import loon.action.ActionListener;
import loon.canvas.LColor;
import loon.component.LClickButton;
import loon.component.LComponent;
import loon.component.layout.LayoutManager;
import loon.event.ActionKey;
import loon.event.ClickListener;
import loon.event.GameTouch;
import loon.font.BMFont;
import loon.opengl.GLEx;
import loon.utils.TArray;
import loon.utils.processes.RealtimeProcess;
import loon.utils.timer.LTimerContext;
public class MultiScreenTest extends Screen {
private int page = 0;
@Override
public LTransition onTransition() {
return LTransition.newPixelThunder(LColor.yellow);
}
@Override
public void draw(GLEx g) {
}
public static LClickButton getBackButton(final Screen screen, final int page) {
return getBackButton(screen, page, screen.getWidth() - 100,
screen.getHeight() - 70);
}
public static LClickButton getBackButton(final Screen screen,
final int page, final int x, int y) {
LClickButton back = new LClickButton("Back", x, y, 80, 50);
screen.addTouchLimit(back);
back.setLayer(130);
back.SetClick(new ClickListener() {
@Override
public void UpClick(LComponent comp, float x, float y) {
}
@Override
public void DragClick(LComponent comp, float x, float y) {
}
@Override
public void DownClick(LComponent comp, float x, float y) {
}
// 事件锁,让点击唯一化
ActionKey click = new ActionKey(ActionKey.DETECT_INITIAL_PRESS_ONLY);
@Override
public void DoClick(LComponent comp) {
if (!click.isPressed()) {
// 为按钮设置一个旋转动画,每次前进36度
set(comp).rotateTo(360, 36f).start()
.setActionListener(new ActionListener() { // 监听动作事件
// 事件完毕后,调用screen标记为main的
@Override
public void stop(ActionBind o) {
Screen s = screen.runScreen("main");
if (s != null) {
s.index = page;
}
// 还原当前动作角色旋转角度为0
o.setRotation(0);
}
@Override
public void start(ActionBind o) {
}
@Override
public void process(ActionBind o) {
}
});
click.press();
}
}
});
return back;
}
// 制作一个按钮监听器
private class MyClickListener implements ClickListener {
@Override
public void DoClick(LComponent comp) {
}
@Override
public void DownClick(LComponent comp, float x, float y) {
if (comp instanceof LClickButton) {
// 查看LObject状态设置
switch (comp.getStatus()) {
case LObject.NOT: // 如果对象无状态设置
LClickButton click = (LClickButton) comp;
String text = click.getText();
// 由于将按钮名与Screen名设定的一样,所以直接调用按钮名就可以运行指定Scrren了
runScreen(text);
break;
case LObject.FALSE: // 切换新的示例Screen
// wait code
break;
case LObject.TRUE:// 退出
LSystem.exit();
break;
default:
break;
}
}
}
@Override
public void UpClick(LComponent comp, float x, float y) {
}
@Override
public void DragClick(LComponent comp, float x, float y) {
}
}
final String[] page0 = { "MessageBox", "Live2d", "Action", "Effect",
"Emulator", "TileMap", "SpriteBatch", "BatchScreen", "BMFont",
"Layout", "Table", "Menu", "Names", "Toast", "List", "Sprite",
"TexturePack", "LNode", "Scroll", "Cycle", "TextArea", "Progress",
"Particle", "SelectIcon", "Control", "JsonRes", "SheetFont",
"ParConfig", "RippleTouch", "Sound", "Gesture", "Physical",
"LNode2", "Input", "Depth", "Canvas", "GameMap", "MoveClip",
"TextureImage", "Session" };
final String[] page1 = { "Screen", "Slider", "Alert", "Animation",
"FrameLoop", "Script", "SText", "Light", "Countdown", "AVG",
"Layer", "LLK","TextField","SRPG","PShadow","Array2DMap","Image","Natural" };
static BMFont info_font;
@Override
public void onLoad() {
String[][] pages = { page0, page1 };
// 使用图片字体(如果不设置,则loon默认使用当前系统字体)
if (info_font == null) {
try {
// 加载
info_font = new BMFont("assets/info.fnt", "assets/info.png");
} catch (Exception e) {
e.printStackTrace();
}
// 缩放为0.6倍
info_font.setFontScale(0.6f);
}
int index = 0;
// 构建一个通用的监听器
MyClickListener clickListener = new MyClickListener();
Screen screen = getScreen("main");
if (screen == null) {
// 预先设定多个Screen,并赋予名称
addScreen("main", this);
} else {
page = screen.index;
}
if (page == 0) {
addScreen(page0[index++], new LMessageBoxTest());
addScreen(page0[index++], new Live2dTest());
addScreen(page0[index++], new ActionEventTest());
addScreen(page0[index++], new EffectTest());
addScreen(page0[index++], new EmulatorTest());
addScreen(page0[index++], new TileMapTest());
addScreen(page0[index++], new SpriteBatchTest());
addScreen(page0[index++], new SpriteBatchScreenTest());
addScreen(page0[index++], new BMFontTest());
addScreen(page0[index++], new LayoutTest());
addScreen(page0[index++], new TableTest());
addScreen(page0[index++], new MenuTest());
addScreen(page0[index++], new DecideNameTest());
addScreen(page0[index++], new ToastTest());
addScreen(page0[index++], new ListTest());
addScreen(page0[index++], new SpriteTest());
addScreen(page0[index++], new LTexturePackTest());
addScreen(page0[index++], new NodeTest());
addScreen(page0[index++], new ScrollTest());
addScreen(page0[index++], new CycleTest());
addScreen(page0[index++], new TextAreaTest());
addScreen(page0[index++], new ProgressTest());
addScreen(page0[index++], new ParticleTest());
addScreen(page0[index++], new SelectIconTest());
addScreen(page0[index++], new ControlTest());
addScreen(page0[index++], new JSonResTest());
addScreen(page0[index++], new SpriteSheetFontTest());
addScreen(page0[index++], new ParticleConfigTest());
addScreen(page0[index++], new RippleTouchTest());
addScreen(page0[index++], new SoundTest());
addScreen(page0[index++], new GestureTest());
addScreen(page0[index++], new PhysicalTest());
addScreen(page0[index++], new Node2Test());
addScreen(page0[index++], new SysInputTest());
addScreen(page0[index++], new DepthTest());
addScreen(page0[index++], new CanvasLayerTest());
addScreen(page0[index++], new GameMapTest());
addScreen(page0[index++], new MovieClipTest());
addScreen(page0[index++], new TextureImageTest());
addScreen(page0[index++], new SessionTest());
} else if (page == 1) {
addScreen(page1[index++], new Test());
addScreen(page1[index++], new SliderTest());
addScreen(page1[index++], new AlertTest());
addScreen(page1[index++], new AnimationTest());
addScreen(page1[index++], new FrameLoopTest());
addScreen(page1[index++], new RocScriptTest());
addScreen(page1[index++], new ScrollTextTest());
addScreen(page1[index++], new LightImageTest());
addScreen(page1[index++], new CountdownTest());
addScreen(page1[index++], new TitleScreen());
addScreen(page1[index++], new TDTest());
addScreen(page1[index++], new LLKTest());
addScreen(page1[index++], new TextFieldTest());
addScreen(page1[index++], new SRPGTest());
addScreen(page1[index++], new PShadowTest());
addScreen(page1[index++], new MapTest());
addScreen(page1[index++], new ImageTest());
addScreen(page1[index++], new NaturalTest());
}
// 默认按钮大小为100x25
int btnWidth = 100;
int btnHeight = 25;
// 添加一组按钮布局,并返回按钮对象
TArray<LClickButton> clicks = LayoutManager.elementButtons(this,
pages[page], 15, 25, btnWidth, btnHeight, clickListener,
LSystem.viewSize.getHeight() - btnHeight);
// final TArray<ActionTween> tweens = new TArray<ActionTween>();
// 首先让按钮不可见
for (int i=0;i<clicks.size;i++) {
LClickButton btn = clicks.get(i);
//设置按钮头alpha为0(即不显示)
btn.setAlpha(0);
//设置提示信息为按钮名
btn.setToolTipText(pages[page][i]);
//设置位图字体()
btn.setFont(info_font);
// 为按钮设置事件,并加载入一个集合
// tweens.add(set(btn));
}
// 设置一个退出按钮
LClickButton exitClick = LClickButton.make(48, 48, "cross.png",
"cross_effect.png", "cross_effect.png");
// 设定一个特殊状态为true
exitClick.setStatus(LObject.TRUE);
// 设置监听
exitClick.S(clickListener);
// 初始透明度0
exitClick.setAlpha(0);
// 按钮置顶
topOn(exitClick);
// 偏移Screen大小-按钮大小-5
exitClick.setX(getWidth() - exitClick.getWidth() - 5);
add(exitClick);
// tweens.add(set(exitClick));
// 设置一个下页按钮
LClickButton nextClick = LClickButton.make(page == 0 ? "NEXT" : "BACK",
45, 25);
// 设定一个特殊状态为false
nextClick.setStatus(LObject.FALSE);
// 设置监听
nextClick.SetClick(clickListener);
// 初始透明度0
nextClick.setAlpha(0);
nextClick.setFont(info_font);
// 偏移Screen大小-按钮大小-5
nextClick.setX(getWidth() - nextClick.getWidth() - 5);
nextClick.setY(getHeight() - nextClick.getHeight() - 24);
nextClick.SetClick(new ClickListener() {
@Override
public void UpClick(LComponent comp, float x, float y) {
}
@Override
public void DragClick(LComponent comp, float x, float y) {
}
@Override
public void DownClick(LComponent comp, float x, float y) {
}
@Override
public void DoClick(LComponent comp) {
//如果按钮文本为next
if (((LClickButton) comp).getText().equals("NEXT")) {
//索引变更为page+1
runScreen("main").index = page + 1;
} else {
//变更为page-1
runScreen("main").index = page - 1;
}
}
});
add(nextClick);
// tweens.add(set(nextClick));
// 设定一个游戏进程,半秒后让按钮导入
RealtimeProcess process = new RealtimeProcess() {
@Override
public void run(LTimerContext time) {
// 当Screen过渡动画播放完毕后
if (isTransitionCompleted()) {
// 穷举按钮事件
/*
* for (ActionTween tween : tweens) { // 淡出事件,开始执行
* tween.fadeOut(10f).start(); // 删除单独进程(否则会不断执行) kill(); }
*/
findUINames("ClickButton").// 查找出所有组件名称为
// ClickButton
// 的(此处可查找多个)
// fadeIn(10).startTweens();
fadeIn(10).delay(1f).rotateTo(360).startTweens(); // 组件淡入,速度10,间隔1秒,旋转360,开始动画
kill();
}
}
};
// 延迟半秒执行
process.setDelay(LSystem.SECOND / 2);
addProcess(process);
}
@Override
public void alter(LTimerContext timer) {
}
@Override
public void resize(int width, int height) {
}
@Override
public void touchDown(GameTouch e) {
}
@Override
public void touchUp(GameTouch e) {
}
@Override
public void touchMove(GameTouch e) {
}
@Override
public void touchDrag(GameTouch e) {
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void close() {
}
}