MAGI JAVA -Make a game in Java-
JAVA Game作成講座 001回 キャラを差し替える


RPGkouza001 ZIPファイル


RPGの主役が戦闘機では頭脳戦艦ガルになってしまうので、
人間キャラに差し替えました。

では具体的にどこに手を加えたのかを解説します。
よくわからない部分ばかりだと思いますが、
そういうものなのか、と流してください。

Graというフォルダを作り、
プレイヤーユニットの絵を入れました。
一枚絵に上下左右の移動パターンをまとめている、
いわゆるツクールと同じキャラ絵です。
では、それをどう画面に反映するかを書いていきます。

[44 - 45 行目]
public BufferedImage playerGra=null;
public int pShift=0;

BufferedImage形式で playerGraという変数を作ります。
pShiftはプレイヤーの向きを表します。
個人的にテンキーをイメージしてナンバーを振っています。
8↑ 2↓ 4← 6→ という感じで。

[79 - 81 行目]
InputStream is3 = this.getClass().getResourceAsStream("Gra\\mapUnit1.gif");
playerGra = ImageIO.read(is3);
is3.close();

ちょっとややこしくなりますが、
playerGraに絵のファイルをリンクさせる処理です。
ファイルのある場所を指定し、playerGraに読み込みます。
Graというフォルダに"mapUnit1" という名前で登録してあるので、
それを指定します。
一度やっておけばあとはplayerGraを選ぶだけで絵の操作ができます。

[131 - 148行目]
pShift=8;
// ??????A
if(isKeyCodePressed(KeyEvent.VK_LEFT)){

// ???????????
//muki = 2;
pShift=4;
// ????????
mx = mx - 1;

}

// ?E????A
if(isKeyCodePressed(KeyEvent.VK_RIGHT)){

// ???????????
//muki = 1;
pShift=6;
// ????????
mx = mx + 1;

}

ニュートラルの状態でpShiftを8(上向き)にします。
左移動で4、右移動で6に変化させます。
mukiは使わないのでコメント化して無効化させます。

[184 - 201行目]
public void paint(Graphics g){

// ????h?????
g.setColor(Color.black);
g.fillRect(0, 0, 800, 800);

// ?F???D??`????
//g.drawImage(imageShips[muki], x, y, 32, 40, this);
int sx=0;
int sy=0;
int picSize=32;
if (pShift==8) sy=148;
if (pShift==2) sy=0;
if (pShift==4) sy=48;
if (pShift==6) sy=96;
g.drawImage(playerGra,x,y-16,x+picSize,y+picSize,sx,sy,sx+picSize,sy+picSize+16,this);

} // end paint

ここが大きく手を加えた場所です。
g.drawImage(imageShips[muki], x, y, 32, 40, this);
で戦闘機のグラフィックを描いていましたが、
それを無効化します。
代わりにプレイヤーのグラフィック、playerGraを表示します。

g.drawImageの文法はこういうものだと覚えるしかありません。
戦闘機の絵を表示していた時より引数が多いですが、
後々の為にこのやり方で統一します。
最初の要素には「表示したい絵の変数名(=playerGra)」を指定。

次の要素はx,y-16,x+picSize,y+picSize
を指定しています。
x,yというのは画面上のx,y座標です。
なぜyを-16しているのかというと、
正方形に絵が潰されるからです。
ツクールの絵の規格が縦長なので、縦だけ16ドット長く表示させます。
試しにこれをx,y,x+picSize,y+picSizeにして実行すると
意味が分かると思います。

そして最後の要素。
sx,sy,sx+picSize,sy+picSize+16,this);
sx,syは、mapUnitの画像の切り出し始点の左上座標です。
sx+picSize,sy+picSizeは、切り出しの右下座標です。
1キャラ分を四角く切り抜いている、という事です
例のごとくyの方が長いx32*y48なので、16長めに指定します。

if (pShift==8) sy=148;
if (pShift==2) sy=0;
if (pShift==4) sy=48;
if (pShift==6) sy=96;

向きによって絵の切り出し座標が変わるので、
それを反映しているわけです。
ツクール規格では上から↓0←48→96↑148で並んでいるので、
それに準じて切り出し始点をセットしているわけです。

手を加えたのは以上です。
よくわからない部分が多いと思いますが、
変数の数値を少し減らしたり増やしたりすることで、
これがこう変わるのか、と理解できると思います。

次回は…
左右しか動けないインベーダーゲーム状態に、
上下移動を加えます。






・トップページへ戻る
inserted by FC2 system