▼MIDP2.0メモ▼
スプライトを使用する


スプライトを使用するプログラム。



画像の準備

女の子
-girl.png
-96x48


マップ
-map.png
-144x48


プログラム
SpriteEx.java
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

//スプライトを使用する(本体)
public class SpriteEx extends MIDlet {

    //コンストラクタ
    public SpriteEx() {
        SpriteCanvas c=new SpriteCanvas();
        Display.getDisplay(this).setCurrent(c);
        Thread thread=new Thread(c);
        thread.start();
    }

    //アプリの開始
    public void startApp() {
    }

    //アプリの一時停止
    public void pauseApp() {
    }

    //アプリの終了
    public void destroyApp(boolean flag) {
    }
}


SpriteCanvas.java
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;

//スプライトを使用する(キャンバス)
public class SpriteCanvas extends GameCanvas
    implements Runnable {
    final static int[][] MAP_DATA={//マップデータ
        {1,1,1,1,1,1,1,1,1,1},
        {1,2,0,0,0,0,1,0,0,1},
        {1,0,0,0,0,0,1,1,0,1},
        {1,0,1,1,1,1,1,1,0,1},
        {1,0,0,1,0,0,0,1,0,1},
        {1,1,0,1,0,1,1,1,0,1},
        {1,0,0,1,0,0,0,0,0,1},
        {1,0,1,1,0,1,0,1,1,1},
        {1,0,0,0,0,1,0,0,3,1},
        {1,1,1,1,1,1,1,1,1,1}};

    Image girlImg;//女の子イメージ
    Image mapImg; //マップイメージ

    //コンストラクタ
    SpriteCanvas() {
        //キーイベントの抑制
        super(false);

        //画像ファイルの読み込み
        try {
            girlImg=Image.createImage("/girl.png");
            mapImg =Image.createImage("/map.png");
        } catch (Exception e) {
            System.out.println(e.getClass().getName());
        }
    }

    //実行
    public void run() {
        Graphics g=getGraphics();//グラフィック
        int      keyState;       //キー状態

        //スプライト
        Sprite girl=new Sprite(girlImg,48,48);
        int girlX    =48;//X座標
        int girlY    =96;//Y座標
        int girlPX   =0; //直前X座標
        int girlPY   =0; //直前Y座標
        int girlFrame=0; //インデックス

        //タイルレイヤー
        TiledLayer map=new TiledLayer(10,10,mapImg,48,48);
        for (int j=0;j<MAP_DATA.length;j++) {
            for (int i=0;i<MAP_DATA[j].length;i++) {
                map.setCell(i,j,MAP_DATA[j][i]);
            }
        }

        //レイヤーマネージャー
        LayerManager manager=new LayerManager();
        manager.append(girl);
        manager.append(map);

        while (true) {
            //キー状態の取得
            keyState=getKeyStates();

            //前回XY座標の保持
            girlPX=girlX;
            girlPY=girlY;

            //移動
            if (keyState!=0) girlFrame=(girlFrame+1)%2;
            if ((UP_PRESSED   &keyState)!=0) girlY-=8;
            if ((DOWN_PRESSED &keyState)!=0) girlY+=8;
            if ((LEFT_PRESSED &keyState)!=0) girlX-=8;
            if ((RIGHT_PRESSED&keyState)!=0) girlX+=8;

            //スプライトのフレームと位置を指定
            girl.setFrame(girlFrame);
            girl.setPosition(girlX,girlY);

            //衝突時は前回XY座標に戻る
            if (girl.collidesWith(map,false)) {
                girlX=girlPX;
                girlY=girlPY;
                girl.setPosition(girlX,girlY);
            }

            //視点の指定
            manager.setViewWindow(
                girlX-(getWidth()-48)/2,
                girlY-(getHeight()-48)/2,
                getWidth(),getHeight());

            //画面の描画
            g.setColor(250,200,120);
            g.fillRect(0,0,getWidth(),getHeight());
            manager.paint(g,0,0);
            flushGraphics();

            //スリープ
            try {
                Thread.sleep(100);
            } catch (Exception e) {
            }
        }
    }
}



−戻る−