Snakeの例に大きく基づいて2Dタイルシステムを作成しようとしています。元のmTileGridはまだありますが、新しい配列mMapGridがあります。重要なのは、更新サイクルごとにmMapGridからmTileGridにデータをコピーすることです。したがって、直接の画面よりも広い領域をシミュレートします。
さらに関数を作成しましたが、これについて簡単に説明します...その後、問題は次のとおりです。
マップグリッドにタイルを設定しますpublicvoidsetMapTile(int tileindex、int row、int column){mMapGrid [row] [column] = tileindex; }
onDraw()で呼び出され、データをmMapGridからmTileGridに移動します
private void CopyArrayData()
{
//TODO: TAG
int countrow, countcolumn;
countrow = 0;
countcolumn = 0;
Log.w( "PassNumbers"、 "TopLeftCorner.column is:" + TopLeftCorner.column + "and TopLeftCorner.row is" + TopLeftCorner.row);
for(int x = TopLeftCorner.column; x <= mXTileCount; x++)
{
for(int y = TopLeftCorner.row; y <= mYTileCount; y++)
{
countrow++;
countcolumn++;
if(countrow == mXTileCount)
{
countrow = 0;
}
if(countcolumn == mYTileCount)
{
countcolumn = 0;
}
int set = mMapGrid[y + TopLeftCorner.row][x + TopLeftCorner.column];
if(set == SnakeView.GRASS)
{
setTile(set, countrow, countcolumn);
}
else
{
setTile(SnakeView.ROCK, countrow, countcolumn);
}
if(pass1 == false)
{
Log.w("TileGridAccess",("TileGrid Access: row" + countrow + " column" + countcolumn));
Log.w("MapGridAccess","MapGrid Access: row" + (y + TopLeftCorner.row) + " column:" + (x + TopLeftCorner.column));
}
}
pass1 = true;
}
}
}
ここで呼び出されるsetMapTile()を使用したupdate()関数
public void update() {
if (mMode == RUNNING) {
clearTiles();
setMapTile(GRASS, 5, 5);
setMapTile(GRASS, 5, 6);
setMapTile(GRASS, 5, 7);
setMapTile(GRASS, 5, 8);
setMapTile(GRASS, 5, 9);
mRedrawHandler.sleep(mMoveDelay);
}
}
onDraw()関数:(デフォルトのタイルがあるため、ゼロより大きい場合のチェックが削除されていることを除いて、Snakeの元のTileViewから変更されていません)
@Override public void onDraw(Canvas canvas){super.onDraw(canvas);
CopyArrayData();
for (int x = 0; x < mXTileCount; x += 1) {
for (int y = 0; y < mYTileCount; y += 1) {
canvas.drawBitmap(mTileArray[mTileGrid[x][y]],
mXOffset + x * mTileSize,
mYOffset + y * mTileSize,
mPaint);
}
}
}
問題は、表示されるタイルが等間隔に配置されておらず、正常に動作しないことです。彼らは彼らの列の周りに無計画に散らばっています。