第5回  スクラッチパッドへのデータ保存とダウンロードファイルの処理90Xi専用ゲームiアプリ開発講座(4/4 ページ)

» 2004年11月15日 22時22分 公開
[澤橋辰典・武上将樹,ITmedia]
前のページへ 1|2|3|4       

is = Connector.openInputStream(SP_POS + SP_FIRST_FLG);
flg_first = is.read();
is.close();

 ここに何もデータがなければ、0の値を拾って初めての起動と判断し、サーバから画像データを取得する。取得したらスクラッチパッドにサイズとデータを保存し、スクラッチパッド先頭バイトに1を書き込む。このとき書き込む値は0以外であれば何でもよい。

int image_pos = 0;
//初回起動時
if (flg_first == 0) {
  byte[] byteData;
  for(int i=0;i<RES_COUNT;i++) {
    hc = (HttpConnection)Connector.open(IApp.getSourceURL() + "res/card" + i + ".gif",
                      Connector.READ, true);
    hc.setRequestMethod(HttpConnection.GET);
    hc.connect();
    image_size[i] = (int)hc.getLength();
    is = hc.openInputStream();
    byteData = new byte[image_size[i]];
    is.read(byteData);
    is.close();
    hc.close();
  dos = Connector.openDataOutputStream(SP_POS + (SP_IMAGE_SIZE+i*4));
    dos.writeInt(image_size[i]);
    dos.close();
    os = Connector.openOutputStream(SP_POS + (SP_IMAGE_DATA+image_pos));
    os.write(byteData);
    os.close();
    image_pos += image_size[i];
  }
  //データのダウンロードと保存に成功したら起動フラグを立てる
  os = Connector.openOutputStream(SP_POS + SP_FIRST_FLG);
  os.write(1);
  os.close();
} else {
  //2回目以降起動時
  …
}

 今回の場合、72種類のカード絵柄をまとめて一つのファイルにしたため、描画をする時に32×32ピクセルの絵柄を、1枚ずつ切り出さなくてはならない。この作業を簡易化するため、以下のようにカード番号とX、Y座標を指定することで、カードの枠と該当する箇所の絵柄を描画するメソッドを作成した。

private void drawImageCard(Graphics g, int card, int dx, int dy) {
  if (card < 0 || 71 < card) {
    return;
  }
  g.drawImage(img[0], dx, dy);
  g.drawImage(img[2], dx+7, dy+30, (card%12)*32, (card/12)*32, 32, 32);
}

 次回より、いよいよ通信対戦を行うためのサーバサイドのプログラミングについて解説していく。ネットワークを利用できるアプリが作れるようになれば、今までとは一味違ったこともできるようになるはずだ。

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

2024年03月29日 更新
最新トピックスPR

過去記事カレンダー

2024年