初めに
現在進行形で作ってます、
最終目標はBluetoothを使って二人で対戦を考えてます。
きっかけ
私事ですが今ファイアー*ムブレムにハマってまして、それがどんな処理になっているんだろう?作ってみたい!
と思い作り始めました。
動作環境
android 6.0 以上 ムズカシイ仕組みは使っていないので動くはず。
基本設計
SurfaceViewを継承してGameViewを作成してます、主に(メインループや描画などはDixqさんのAndroidの館の「ゲーム イライラ棒アプリ作成」を参考にさせて頂いてます)
処理ごとにファイルを分けて書いてるのでデバッグがラクです。
配置されたユニットの描画について
あまりこういった戦略ゲーム(マスのユニットを進めていくゲーム)の製作記事がないので大変でした。
自軍ユニットはPlayerPieceList(ArrayList)を使用して管理、そのインデックスをcharMap[][]に代入してイベントが発生したらcharMap[][]をもとにPlayerPieceListを参照するようにしてます、
敵軍ユニットは別にEnemyPieceList(ArrayList)を、用意してそのときに敵軍はインデックス + 200で**charMap[][]**に代入して区別するようにしてます。
さらに職種に応じた画像を出すために**JobMap[][]**を用意して職種に応じた値を代入してます。
描画時にそれを参照して職種に合わせた画像を表示させます。
BtlCtrlにPlayerPieceList、EnemyPieceListが入ってます
一部抜粋
@Override
public void OnDraw(Canvas c) {
int x, y;
cnt++;
//jobMapをもとにキャラを描画する
for (x = 0; x < Map.Inst().mapSizeX; x++) {
for (y = 0; y < Map.Inst().mapSizeY; y++) {
//jobMapをもとにキャラを描画
if (Map.Inst().charMap[x][y] >= 200) { //200より大きければ敵
if (Map.Inst().jobMap[x][y] == 1) { //敵剣士
//if(BtlCtrl.Inst().PlayerPieceList.get(Map.Inst().charMap[x][y])
//c.drawBitmap(image.enemySword[BtlCtrl.Inst().EnemyPieceList.get(Map.Inst().charMap[x][y] - 1 - 200).heading], image.rowSize * x, image.rowSize * y, paint);
if (cnt < 30) {
EnemyDraw(image.enemySword, x, y, 0, c, paint);
} else if (cnt < 60) {
EnemyDraw(image.enemySword, x, y, 1, c, paint);
} else {
EnemyDraw(image.enemySword, x, y, 0, c, paint);
cnt = 0;
}
public void EnemyDraw(Bitmap img[], int posX, int posY, int leg, Canvas c, Paint p){
if(leg == 1){
c.drawBitmap(img[BtlCtrl.Inst().EnemyPieceList.get(Map.Inst().charMap[posX][posY] - 200).heading + 1], (image.rowSize * posX) + Global.Inst().mapScrollX, (image.rowSize * posY) + Global.Inst().mapScrollY, p);
}else{
c.drawBitmap(img[BtlCtrl.Inst().EnemyPieceList.get(Map.Inst().charMap[posX][posY] - 200).heading - 1], (image.rowSize * posX) + Global.Inst().mapScrollX, (image.rowSize * posY) + Global.Inst().mapScrollY, p);
}
}
EnemyDrawのインデントがずれてしまった。。。
スクリーンショット
引っかかったところ
Androidではdpiの関係で画像を自動で拡大縮小するみたいで64*64ピクセルの画像を用意してもAndroid上では変わってしまうので必要な時に.GetWidthで画像サイズを取得して解決しました。
#参考にさせて頂いたサイト
Androidの館「ゲーム イライラ棒アプリ作成」
#終わりに
ぼちぼちLightning Talksっぽく書いていこうと思います。
下手な文章ですが最後まで読んでいただきありがとうございます。