我遇到了问题,我不确定如何处理解决方案。 我需要为我的XNA应用程序创建一个2D地图编辑器,并使用一定数量的图块。 假设地图将是50x100平铺。
我不确定要用于地图,磁贴以及如何将其存储在硬盘驱动器上以便以后加载的数据结构。
我现在在想的是这个。我将地图存储在一个文本文件中:
//x, y, ground_type, object_type
0, 0, 1, 0
0, 1, 2, 1
其中0 = Grass,1 =地面地形的River etcc,0 = Nothing,1 =对象类型的墙。
然后我会有一个游戏组件Map类,可以从头开始读取该文件或创建一个新文件:
class Map : DrawableGameComponent {
//These are things like grass, whater, sand...
Tile ground_tiles[,];
//These are things like walls that can be destroyed
Tile object_tiles[,];
public Map(Game game, String filepath){
for line in open(filepath){
//Set the x,y tile to a new tile
ground_tiles[line[0], line[1]] = new Tile(line[3])
object_tiles[line[0], line[1]] = new Tile(line[4])
}
}
public Map(Game game, int width, int heigth){
//constructor
init_map()
}
private void init_map(){
//initialize all the ground_tiles
//to "grass"
for i,j width, heigth{
ground_tiles[i,j] = new Tile(TILE.GRASS)
}
public override Draw(game_time){
for tile in tiles:
sprite_batch.draw(tile.texture, tile.x, tile.y etc..)
}
我的Tile类可能不是游戏组件。 我仍然不太确定如何处理碰撞检测,例如来自玩家的子弹与地图对象之间的碰撞检测。应该由Map类还是某种超级Manager类处理?
欢迎任何提示。 谢谢!
答案 0 :(得分:1)
为什么不将它存储为:
Height
Width
GroundType * (Height * Width)
给予像
这样的东西4
4
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
它既简单又紧凑。 :)对于游戏内存储,2D阵列非常适合这种情况,除非您有其他特定需求。典型的碰撞检测技术是由物理子系统完成一个宽相位,例如边界球体或轴对齐边界框,然后有可能碰撞的物体对来计算是否存在实际碰撞。 / p>
你的瓷砖类可能不应该是一个组件,除非你有一个非常令人信服的理由。
编辑:在那里忘记对象类型,但也很容易集成它。
答案 1 :(得分:0)
谢谢,但我决定(ground_type,object_type)对。 所以像
这样的输入文件0, 1
0, 0,
0, 0,
1, 1
使用以下映射: 地面= {0:草,1:道路} OBJECTS = {0:无,1:箱子} 并且map的width = 2和height = 2将产生以下内容:
grass+crate | grass
grass | road+crate
当然,我必须知道地图的宽度/高度才能理解文件。我也可以把它放在输入文件中。