オープンアプリ・ゲームコンテスト
コンテスト概要 応募方法 応募作で遊ぼう アプリ開発講座 Special Special

アプリ開発講座

講座スケジュール
第1回 オープンアプリ(Java)とJava実行環境
line
第2回 はじめてのオープンアプリ(Java)の作成
line
第3回 イメージの描画
line
第4回 キー入力の処理
line
第5回 オープンアプリ(Java)への移植
line
第6回 ゲームの作成
line第7回 端末へのデータ保存
line
第8回 サウンドの再生
line
第9回 バイブレーションとブラウザ起動
line 最終回 HTTPによる通信
line

開発講座TOPへ



講師プロフィール
株式会社ユビキタスエンターテインメント 布留川英一

1999年のJavaMEの仕様公開を期に「JAVA PRESS(技術評論社)」にてライターとしての活動をはじめ、2000年の503iシリーズの発売を期にドワンゴへ移り、携帯アプリの研究開発を行う。2005年に独立し、ユビキタスエンターテインメントにて次世代コンテンツを作成中。
【著書】
MIDP 2.0 携帯Javaアプリ開発ハンドブック
iアプリゲーム開発テキストブック
ActionScript 3.0 ゲームプログラミングブック
他6冊

 

 

第7回 
端末へのデータ保存

第8回の今回は、端末へのデータ保存について解説します。前回作成した弾幕避けゲームにハイスコア保存機能を追加します。ゲーム画面の左上にハイスコアを表示します。
[サンプルプログラムのダウンロード]



プログラムは、次の2つのクラスで構成されています。

  • DanmakuGameクラス(DanmakuGameEx.java)
  • DanmakuCanvasクラス(DanmakuCanvas.java)

プロジェクト名「DanmakuGame2」とクラス名「DanmakuGame」でプロジェクトを作成してください。

レコードストアとレコード


「レコードストア」とは、オープンアプリ(Java)のデータ保存領域のことです。レコードストアの領域はアプリごとに用意されており、他のアプリのレコードストアを参照することも可能です。また、レコードストアは複数の「レコード」で構成されており、各レコードは「レコードID」を持ち、これによりレコードの識別を行います。

レコードストアを操作するには「javax.microedition.rms.RecordStore」クラスを使い、

  1. レコードストアの接続
  2. レコードの書き込み・読み込み
  3. レコードストアの切断

の順に処理を行います。

レコードストアの書き込み

DanmakuCanvasクラスに追加したレコードストアの書き込み部分は次の通りです。

DanmakuCanvas.javaの一部
    //ハイスコアの書き込み【追加】
    private void saveHighScore(int highscore) {
        RecordStore rs=null;
        try {
            //ハイスコアをバイトデータに変換
            ByteArrayOutputStream out=new ByteArrayOutputStream();
            out.write(highscore);
            out.close();
            byte[] w=out.toByteArray();

            //レコードストアの接続
            rs=RecordStore.openRecordStore("highscore",true);

            //レコードの追加
            if (rs.getNumRecords()==0) {
                rs.addRecord(w,0,w.length);
            }
            //レコードの更新
            else {
                rs.setRecord(1,w,0,w.length);
            }

            //レコードストアの切断
            rs.closeRecordStore();
        } catch (Exception e) {
            System.out.println(e.toString());
            //例外処理
            try {
                if (rs!=null) rs.closeRecordStore();
            } catch (Exception e2) {
            }
        }
    }

レコードストアの接続を行うには、openRecordStore()メソッドを使います。

[RecordStoreクラス]
static RecordStore openRecordStore(name,create)
name レコードストアの名前(最大32バイト):String型
create 必要に応じてレコードストアを作成するか(作成するはtrue):boolean型
戻り値 レコードストア:RecordStore型
レコードストアの接続を行う。

createにtrueを指定すると、指定した名前のレコードストアが存在しない時は新規作成し、存在する時はそれと接続します。


次に、レコードストアがレコードを保持しているか調べ、ない時はレコードを追加し、ある時はレコードを更新します。
レコード数を取得するには、getNumRecords()メソッドを使います。

[RecordStoreクラス]
int getNumRecords()
戻り値 レコード数:int型
レコード数を取得する。

レコードを追加するには、addRecord()メソッドを使います。戻り値はレコードIDで、1から順番に割り当てられます。

[RecordStoreクラス]
int addRecord(data,offset,size)
data バイトデータ:byte[]型
offset バイトデータの書き込み開始位置:int型
size バイトデータのサイズ:int型
戻り値 レコードID:int型
レコードを追加する。

レコードを更新するには、setRecord()メソッドを使います。

[RecordStoreクラス]
void setRecord(recordID,data,offset,size)
recordID レコードID:int型
data バイトデータ:byte[]型
offset バイトデータの書き込み開始位置:int型
size バイトデータのサイズ:int型
レコードを更新する。

レコードストアの切断を行うには、closeRecordStore()メソッドを使います。

[RecordStoreクラス]
void closeRecordStore()
レコードストアの切断を行う。

レコードストアを閉じないと、次回レコードストアを開けません。例外が発生した時も閉じるようにしてください。

レコードストアを読み込む

DanmakuCanvasクラスに追加したレコードストアの読み込み部分は次の通りです。

DanmakuCanvas.javaの一部
    //ハイスコアの読み込み【追加】
    private int loadHighScore() {
        RecordStore rs=null;
        try {
            //レコードストアの接続
            rs=RecordStore.openRecordStore("highscore",false);

            //レコードの読み込み
            byte[] w=rs.getRecord(1);

            //レコードストアの切断
            rs.closeRecordStore();

            //バイトデータをハイスコアに変換
            ByteArrayInputStream in=new ByteArrayInputStream(w);
            int highscore=in.read();
            in.close();
            return highscore;
        } catch (Exception e) {
            System.out.println(e.toString());
            //例外処理
            try {
                if (rs!=null) rs.closeRecordStore();
            } catch (Exception e2) {
            }
            return 0;
        }
    }

レコードストアからレコードを読み込むには、getRecord()メソッドを使います。

[RecordStoreクラス]
byte[] getRecord(recordID)
recordID レコードID:int型
戻り値 バイトデータ:byte[]
レコードを読み込む。

各種データをバイトデータに変換するには「java.io.ByteArrayOutputStream」クラス、バイトデータを各種データに変換するには「java.io.ByteArrayInputStream」クラスを使うと便利です。

属性設定

レコードストアで使用できる容量は「最大32KB(32678B)」です。属性設定のオプション項目「MIDlet-Data-Size」に使用するデータサイズをバイト単位で指定できますが、指定しないと32KBとみなされます。また、この32Kの中には管理用データのサイズも含まれるため、ファイルやレコードを分割するほど、実際に保存できるデータ量は減ってしまうので注意して下さい。




エミュレータ実行時の注意点

エミュレータを複数起動すると、別の端末とみなされ、別のレコードストアからの読み書きを行うので注意して下さい。タイトルバーの番号(+5550000など)で同じ端末をエミュレートしているかどうかを確認できます。


また、エミュレータのレコードストアの情報消去を行うには、「KToolbar」のメニュー「ファイル⇒ユーティリティ」でユーティリティダイアログを開き、「データベースの消去」を選択します。



おわりに

今回はこれでおしまいです。次回は「サウンドの再生」について解説します。



ページ先頭へ


  Copyright(C) Spicysoft Corporation All rights reserved.
 
アプリゲット