Я пытаюсь создать 2-мерную черепичную систему, основанную в основном на примере Снейка. Оригинальный mTileGrid все еще существует, но есть новый массив: mMapGrid. Дело в том, чтобы скопировать данные из mMapGrid в mTileGrid в каждый цикл обновления и, следовательно, имитировать область, большую, чем ближайший экран.Система 2D-плитки не работает должным образом
Я написал несколько функций, которые я сейчас вкратце объяснить ... После этого проблема:
Установите плитку в сетке карты общественных недействительный setMapTile (интермедиат TILEINDEX, внутр строка, столбец INT) { mMapGrid [строка] [столбец] = tileindex; }
Названный в OnDraw(), перемещает данные из mMapGrid к mTileGrid
private void CopyArrayData()
{
//TODO: TAG
int countrow, countcolumn;
countrow = 0;
countcolumn = 0;
Log.w ("PassNumbers", "TopLeftCorner.column является:" + TopLeftCorner.column + "и TopLeftCorner. строка «+ 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() называется здесь
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(): (без изменений от исходного TileView в Снейка, для ликвидации, за исключением если проверка больше нуля, так как у нас есть плитка по умолчанию)
@Override public void onDraw (Холст холста) { super.onDraw (холст);
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);
}
}
}
Проблема в том, что отображаемые плитки не равномерно распределены и не ведут себя так, как должны. Они беспорядочно разбросаны по своим рядам.
скриншот проблемы: http://s997.photobucket.com/albums/af100/shinysky/mystuff/?action=view¤t=device.png – dragonwrenn
LogCat экспорт: http://www.mediafire.com/?svigjmd6vgegb81 – dragonwrenn
любая другая информация, необходимая и больная с удовольствием опубликует ее – dragonwrenn