08. シーン - hannsi-to/LFJG-LiteFrameJavaGui GitHub Wiki
LFJGのシーンは一つのクラスに対して一つ作成できます。シーン機能を利用することで、別々の用途の描画が行えるようになりコードの可読性があがります。 シーンを作成するには親クラスの LFJGFrame にシーンシステムを埋め込み 子クラスの IScene を登録することでシーン描画が行えるようになります。また 子クラスの IScene の中にシーンシステムを埋め込むことも可能です。
シーンシステム
グローバル変数に SceneSystem sceneSystem
を作成します。 init()関数で sceneSystem = SceneSystem.initSceneSystem();
追加します。
drawFrame()関数内でシーンの描画を行うため sceneSystem.drawFrameScenes();
を追加します。
stopFrame()関数内でもシーンの停止とシーンシステムのクリーンアップを行うため
sceneSystem.stopFrameScenes();
sceneSystem.cleanup();
を追加します。以下はサンプルコードです。
public class MainFrame implements LFJGFrame {
SceneSystem sceneSystem;
Frame frame;
public static void main(String[] args) {
new MainFrame().setFrame();
}
@Override
public void init() {
frame.updateLFJGLContext();
sceneSystem = SceneSystem.initSceneSystem();
}
@Override
public void drawFrame() {
sceneSystem.drawFrameScenes();
}
@Override
public void stopFrame() {
sceneSystem.stopFrameScenes();
sceneSystem.cleanup();
}
@Override
public void setFrameSetting() {
}
public void setFrame() {
frame = new Frame(this, "MainFrame");
}
}
シーン
シーンを作成します。親クラスとは違う子クラスを作成します。
子クラスには IScene
インターフェイスを実装します。グローバル変数に
Frame frame;
Scene scene;
子クラスのコンストラクターに
public Scene1(Frame frame) {
this.frame = frame;
this.scene = new Scene("Scene1", this);
}
そしてインターフェイス実装によって作成されたgetScene()関数の戻り値に scene
を渡してください。
以下がサンプルコードです。
public class Scene1 implements IScene {
Frame frame;
Scene scene;
public Scene1(Frame frame) {
this.frame = frame;
this.scene = new Scene("Scene1", this);
}
@Override
public void init() {
}
@Override
public void drawFrame() {
}
@Override
public void stopFrame() {
}
@Override
public Scene getScene() {
return scene;
}
}
上記と同じようにもう一つシーンを作成します。
public class Scene2 implements IScene {
Frame frame;
Scene scene;
public Scene2(Frame frame) {
this.frame = frame;
this.scene = new Scene("Scene2", this);
}
@Override
public void init() {
}
@Override
public void drawFrame() {
}
@Override
public void stopFrame() {
}
@Override
public Scene getScene() {
return scene;
}
}
登録とシーン切り替え
いくつかのシーンを作成したらそれをシーンシステムに登録しないといけません。そのためには addScene()関数を使用します。
sceneSystem = SceneSystem.initSceneSystem()
.addScene(new Scene1(frame).getScene())
.addScene(new Scene2(frame).getScene())
.initScenes();
そしてどのシーンを描画するかを決めるために setCurrentScene()関数を使用して決めます。
sceneSystem = SceneSystem.initSceneSystem()
.addScene(new Scene1(frame).getScene())
.addScene(new Scene2(frame).getScene())
.setCurrentScene("Scene1")
.initScenes();
これによりScene1が描画されます。 以下はサンプルコードです。
public class MainFrame implements LFJGFrame {
SceneSystem sceneSystem;
Frame frame;
public static void main(String[] args) {
new MainFrame().setFrame();
}
@Override
public void init() {
frame.updateLFJGLContext();
sceneSystem = SceneSystem.initSceneSystem()
.addScene(new Scene1(frame).getScene())
.addScene(new Scene2(frame).getScene())
.setCurrentScene("Scene1")
.initScenes();
}
@Override
public void drawFrame() {
sceneSystem.drawFrameScenes();
}
@Override
public void stopFrame() {
sceneSystem.stopFrameScenes();
sceneSystem.cleanup();
}
@Override
public void setFrameSetting() {
}
public void setFrame() {
frame = new Frame(this, "MainFrame");
}
}