スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



画面切り替え

2010/12/03 追記
この内容は間違いですので参考にしないでください!!
ゲームでは必ず画面を切り替えることがある。
例えばマップ画面から戦闘画面へ切り替えるなど...。

MIDPでは画面の描画処理はCanvasクラスによって行われる。
このクラスの派生させたクラスのpaint()メソッドに描画内容を実装することで思いの画面を描画できる。

画面を切り替えるときはどうすればいいのかといえば,paint()メソッド内で複数の画面を描画できるように実装すればいいのだが, ゲームが複雑になるにつれてコード量も多くなってくる。
こうなってくるとクラスに分けて描画したいと思うようになるはず。

で,自分は複数のCanvasクラスを用意して,画面ごとにCanvasクラスを切り替えて使用することによって画面切り替えを実現した。

このとき切り替えた画面はTread.join()で描画中の画面が閉じるまで描画処理を待機するようにした。

ただ,この方法だと切り替わるタイミングで画面が白くなってしまう問題が発生する。

まだ修正はしていないが,複数のCanvasを持たず一つのCanvasで実装できるようにすればいいのだろうと考えている。


MyMIDlet.java

public final class MyMIDlet extends MIDlet
{
	private CanvasA m_CanvasA = null;

	// コンストラクタ
	public MyMIDlet()
	{
		// インスタンスを生成
		m_CanvasA = new MapCanvas(this);

		// 画面を表示
		Display.getDisplay(this).setCurrent(m_CanvasA);

		// メインスレッド開始
		Thread thread = new Thread(m_CanvasA);
		thread.start();
	}
}

CanvasA.java

final class CanvasA extends Canvas implements Runnable
{
	private MyMIDlet m_Midlet = null;

	public CanvasA(MyMIDlet oMIDlet)
	{
		m_Midlet = oMIDlet;
	}

	public void run()
	{
		// 画面Bを生成
		CanvasB oCanvasB = new CanvasB();

		// スレッドの生成
		Thread oThread = new Thread(oCanvasB);

		// スレッドを開始
		oThread.start();

		// 画面Bへ
		Display.getDisplay(m_Midlet).setCurrent(oCanvasB);

		// 終了するまで待機
		oThread.join();

		// 画面Aへ
		Display.getDisplay(m_Midlet).setCurrent(this);

		// スレッドの解放
		oThread  = null;
		oCanvasB = null;
		System.gc();
	}
}


Iko-Map
スポンサーサイト



コメントの投稿

非公開コメント

アクセス
あなたは
キーワード
カテゴリー
最近の記事
リンク
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

WEB検索
Google

RSSフィード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。