RGBの携帯Java入門

 
ezアプリ入門 ‐au‐
1.はじめに
2.環境構築
3.アプリ作成
4.公開

ディスプレイに「HELLO」と表示するだけの簡単なezアプリを作成してみます。

(1)「スタート」→「すべてのプログラム」→「KDDI」→「KJX作成ツール」を起動します。

(2)「file」→「new project」をクリックします。



(3)「Project Name(プロジェクト名)」と「Project Detail(プロジェクト詳細文)」を入力します。
「Project Name」は、半角英数字でゲームを識別できる名前であれば、何でも良いです。
「Project Detail」は未入力で構いません。
今回は以下のように設定します。

Project Name game01



入力が完了したら「OK」ボタンをクリックします。
プロジェクトごとの「EnviromentEditDialog(環境設定画面)」が表示されたら、それも「OK」ボタンをクリックします。
「C:\EZAppli_SDK\apps」フォルダ内に「game01」フォルダが作成されます。

(4)「C:\EZAppli_SDK\apps\game01」フォルダに移動します。
「game01」フォルダ内は以下のような構成になっています。



(注)
※拡張子の表示が許可されているかを確認してください。
1.上の画面のときに「ツール」→「フォルダオプション」→「表示」タブを開きます。
2.詳細設定欄にある「登録されている拡張子は表示しない」にチェックが付いていないかを確認します。チェックが付いている場合はチェックを外し、「すべてのフォルダに適用」をクリックします。
3.ついでに「縮小版をキャッシュしない」にチェックが付いているかを確認します。チェックが付いていない場合はチェックを付け、「すべてのフォルダに適用」をクリックします。

下記のようになっていればOKです。



(5)ソースの作成をします。
ソースとはプログラムが記述されたファイルのことです。
ソースはプロジェクトフォルダの「src」フォルダに保存しますので、「C:\EZAppli_SDK\apps\game01\src」フォルダに移動してください。
そのフォルダ内でテキストファイルを2つ作成します。
テキストファイルの名前はKicker.javaMainCanvas.javaに変更してください。

下記のようになっていればOKです。




下記の内容をコピーし、Kicker.javaとMainCanvas.javaに貼り付け、上書き保存してください。
※以下のソースは、iアプリ・vアプリ・ezアプリの違いを吸収したインタフェース設計となっています。
※ソースの説明は共通事項をご覧ください。

MIDP用の Kicker.java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
 * ゲームの開始処理を行うクラスです。
 *	
 * @author RGB
 * @version 1.0
 */
public class Kicker extends MIDlet {
	
	/**
	 * メインのキャンバスです。
	 */
	private MainCanvas mc;
	
	
	/**
	* MIDlet開始時、またはPause状態時からResumeするときに呼ばれます。
	*/
	public void startApp() {
		if(mc == null) {
			mc = new MainCanvas(this);
			Display.getDisplay(this).setCurrent(mc);
			mc.start();
		}
	}
	
	
	/**
	* 電話がかかってきたときなどPauseさせる必要があるときに呼ばれます。
	*/
	public void pauseApp() {
	}
	
	
	/**
	* MIDlet終了時に呼ばれます。
	*/
	public void destroyApp(boolean unconditional) {
	}
	
	
}

			

MIDP用の MainCanvas.java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.microedition.rms.*;
import java.io.*;
import java.util.*;

/**
 * メインのキャンバスです。
* * @author RGB * @version 1.0 */ public class MainCanvas extends Canvas implements Runnable { // ------------------------------------------------------------------------ // // 共通部:特に変更する必要はありません。 // // ------------------------------------------------------------------------ /** * 使用領域の幅です。 */ public static final int AREA_WIDTH = 240; /** * 使用領域の高さです。 */ public static final int AREA_HEIGHT = 240; /** * 画面の幅です。 */ public static int DISPLAY_WIDTH; /** * 画面の高さです。 */ public static int DISPLAY_HEIGHT; /** * キー処理で使用する定数で、「上キー」を表します。 */ public static final int KEY_UP = Canvas.UP; /** * キー処理で使用する定数で、「下キー」を表します。 */ public static final int KEY_DOWN = Canvas.DOWN; /** * キー処理で使用する定数で、「右キー」を表します。 */ public static final int KEY_RIGHT = Canvas.RIGHT; /** * キー処理で使用する定数で、「左キー」を表します。 */ public static final int KEY_LEFT = Canvas.LEFT; /** * キー処理で使用する定数で、「決定キー」を表します。 */ public static final int KEY_SELECT = Canvas.FIRE; /** * 押されたキーの値です。 */ private int keyeventPressed = 0; /** * このキャンバスのグラフィックスオブジェクトです。 */ private Graphics g = null; /** * 現在のフレームカウントです。 */ private int frameCount = 0; /** * 現在のシーンです。 */ private int scene = 0; /** * シーンの切り替え状態を管理します。 */ private boolean sceneSwitch = false; /** * 設定されたMIDletオブジェクトです。 */ private MIDlet kicker; /** * ゲーム用のスレッドです。 */ private Thread th; /** * コンストラクタです。 */ public MainCanvas(MIDlet kicker) { this.kicker = kicker; DISPLAY_WIDTH = getWidth(); DISPLAY_HEIGHT = getHeight(); } /** * キャンバス処理を開始します。 */ public void start() { repaint(); } /** * 画面の描画要求時に呼ばれます。 * * @param g グラフィックスオブジェクトが渡されます。 */ public void paint(Graphics g) { if(th == null) { this.g = g; th = new Thread(this); th.start(); Thread.currentThread().yield(); } } /** * キーを押した時に呼ばれます。 * * @param keyCode 押されたキーのコードを設定します。 */ public void keyPressed(int keyCode) { keyeventPressed = getGameAction(keyCode); } /** * キーを離した時に呼ばれます。 * * @param keyCode 押されたキーのコードを設定します。 */ public void keyReleased(int keyCode) { keyeventPressed = 0; } /** * 指定されたキーが、押された状態であるかを判定します。 * * @param key 検索するキーを設定します。 */ public boolean keyPressing(int key) { if(keyeventPressed == key) { keyeventPressed = 0; return true; } else { return false; } } /** * 指定されたキーが、キーリピート状態であるかを判定します。 * * @param key 検索するキーを設定します。 */ public boolean keyRepeating(int key) { if(keyeventPressed == key) { return true; } else { return false; } } /** * アプリを終了します。 */ public void exit() { kicker.notifyDestroyed(); } /** * 画像を読み込みます。 * * @param name 画像名称を設定します。 * @return 読み込んだ画像を返します。 */ public Image loadImage(String name) { Image img = null; try { img = Image.createImage("/" + name + ".png"); } catch(IOException ie) { throw new RuntimeException(ie.getMessage()); } return img; } /** * 描画開始時・描画終了時の処理を行います。 * * @param state 描画開始はtrue、描画終了はfalseを設定します。 */ public void draw(boolean state) { if(state) { } else { repaint(); } } /** * 描画に使用する色を設定します。 * * @param red 赤要素の輝度を指定します(0〜255)。 * @param green 緑要素の輝度を指定します(0〜255)。 * @param blue 青要素の輝度を指定します(0〜255)。 */ public void setColor(int red, int green, int blue) { g.setColor(red, green, blue); } /** * 矩形領域を塗りつぶします。 * * @param x 矩形の左上のX座標を指定します。 * @param y 矩形の左上のY座標を指定します。 * @param width 矩形の幅を指定します。 * @param height 矩形の高さを指定します。 */ public void fillRect(int x, int y, int width, int height) { g.fillRect(x, y, width, height); } /** * 文字列を描画します。 * * @param str 描画する文字列を指定します。 * @param x X座標を指定します。 * @param y Y座標を指定します。 */ public void drawString(String str, int x, int y) { g.drawString(str, x, y, Graphics.TOP|Graphics.LEFT); } /** * イメージを描画します。 * * @param image 描画するイメージオブジェクトを指定します。 * @param x X座標を指定します。 * @param y Y座標を指定します。 */ public void drawImage(Image image, int x, int y) { g.drawImage(image, x, y, Graphics.TOP|Graphics.LEFT); } /** * ゲーム用スレッドの処理です。 */ public void run() { try { changeScene(SC_INIT); while(true) { controlScene(); Thread.currentThread().sleep(100); frameCount ++; } } catch(Throwable t) { System.out.println(t.getMessage()); exit(); } } /** * シーンを変更します。 * * @param scene 変更するシーンを設定します。 */ public void changeScene(int scene) { this.scene = scene; sceneSwitch = true; } /** * シーンの初期化処理をすべきかを判断します。 * * @return シーンが変更された直後はtrueを返します。 * それ以降はfalseを返します。 */ public boolean firstScene() { boolean res = sceneSwitch; sceneSwitch = false; return res; } // ------------------------------------------------------------------------ // // 実装部:ゲームごとに変更します。 // // ------------------------------------------------------------------------ /** 「初期化」シーンです。*/ public static final int SC_INIT = 0; /** 「タイトル」シーンです。*/ public static final int SC_TITLE = 1; /** 「プレイ」シーンです。*/ public static final int SC_PLAY = 2; /** 「結果」シーンです。*/ public static final int SC_RESULT = 3; /** * シーンごとの処理を制御します。 */ public void controlScene() { switch(scene) { case SC_INIT : sceneInit(); break; case SC_TITLE : sceneTitle(); break; case SC_PLAY : scenePlay(); break; case SC_RESULT : sceneResult(); break; } } /** * 「初期化」シーンを制御します。 */ public void sceneInit() { if(firstScene()) { } draw(true); setColor(0, 0, 255); fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT); setColor(255, 0, 0); drawString("HELLO", 10, 20); draw(false); } /** * 「タイトル」シーンを制御します。 */ public void sceneTitle() { } /** * 「プレイ」シーンを制御します。 */ public void scenePlay() { } /** * 「結果」シーンを制御します。 */ public void sceneResult() { } }

(6)Project Listの「game01」を選択した状態で、「ビルド」をクリックします。



これで、「C:\EZAppli_SDK\apps\game01\bin」フォルダに、プログラム実行ファイルとなるkjxファイルが作成されます。  ※エラーが出た場合は、もう一度(4)からやり直してください。

(7)ezアプリのエミュレーターで確認をします。
動作確認はKJX作成ツールではなく、ezアプリのエミュレーターである「ezplus Emulator」で行います。
「スタート」→「すべてのプログラム」→「KDDI」→「ezplus Emulator」を起動します。

(8)先ほど作成したkjxファイルを読み込みます。
「...」ボタンをクリックし、(6)の作業で作成された「C:\EZAppli_SDK\apps\game01\bin」フォルダ内にある「game01.kjx」を読み込みます。



(9)起動します。
「Run」ボタンをクリックして起動してください。
ディスプレイが青く塗りつぶされ、赤色の文字で「HELLO」と表示されたらOKです。



表示されたら、次は携帯電話にダウンロードしてみます。


 
RGBの携帯Java入門

Copyright (c) RGB