更新2d数组以包含更大的2d数组的块 – 用于2d瓷砖地图

我需要帮助的是如何获得一大块2d字符数组并更新它,所以我只绘制足够的瓷砖来覆盖屏幕?

目前,我加载一个文本文件中的所有字符,并将其存储在一个数组中。 然后我创建一个较小的数组: char[][] toDraw = new char[height][width]从大数组中获取字符的第一个高度*宽度区域,如下所示:

  public void filterMap() { for(int i = 0; i < height; i++) { for(int j = 0; j < width; j++) { toDraw[i][j] = MapLoader.mapData[i][j]; } } } 

然后我使用这个drawMap方法绘制地图

 public void drawMap(Canvas canvas) { for(int i = 0; i < height; i++) { for(int j = 0; j < width; j++) { if(getBitmap(toDraw[i][j]) != null) { canvas.drawBitmap(getBitmap(toDraw[i][j]), x + (j*tileSize), y + (i*tileSize), null); } } } } 

注意int x和y是我增加移动地图的东西,getBitmap(char c)从char返回一个Bitmap,MapLoader.mapData是文本文件加载到的二维数组。

我已经尝试了在toDraw数组索引中使用偏移量的几种方法来滚动与x,y位置相关的数据,但它们一直是bug /失败。

那么,有没有人有链接到这样的事情可以做(我已经尝试,但没有发现任何帮助),或有经验的2D游戏的人请告诉/告诉我应该怎么做。

目前我的代码将从较大的数组中获取一个区域并将其绘制到屏幕上,唯一的问题是更新toDraw数组中的数据。 谢谢。

该游戏是为Android制作的,但不包含在标签中,因为我不觉得它与问题有关

如果你只想使用一个小块,那么只能遍历该块。

 for(int i = BOTTOM_BOUND; i < TOP_BOUND; i++) { for(int j = LEFT_BOUND; j < RIGHT_BOUND; j++) { // Do something with the chunk toDraw[i][j] = MapLoader.mapData[i][j]; } } 

该循环只会更新由常量形成的小矩形,只要您想更新块就可以使用相同的四点进行迭代。