Articles of 地图

坐标系交错等轴测图

我正在交错的菱形图案中建立一个等轴测图的游戏。 每个游戏物品将位于一个瓦片上,在瓦片或分数偏移内没有移动。 看来有两种常见的方法来安排我将称之为锯齿形和奇偶的瓷砖坐标。 在之字形方法中,X位置被分成两列,相邻的Y值彼此对角。 这似乎是在示例中看到的更常见的方法,并且使用X和Y值的每个配对作为二维数组,但是使对角线移动的算术不那么直观,并且导致以4:1物理缩放“方形”数组。 在奇偶方法中,每个列和行对于X和Y都是奇数或全部均匀,对角相邻的块在两个维度上始终相差+/- 1。 这种方法使对角线移动更简单一些,更好地对应于物理屏幕位置,但是使数据空间中的一半坐标无效。 对于存储,迭代,渲染和移动的机制,哪种方法更好? 由于对角线运动的一致性,我倾向于奇数偶数的方法,但曲折的stream行使我怀疑我是否错过了一些东西。 如果奇偶更好,你如何表示和迭代数据?

如何加载/卸载视图端口当前关注的块数据?

我有一个基于2D瓦片的引擎,具有无限的程序块代。 但是我不能发明一种algorithm,只能在视口上填充大块的瓷砖(并破坏旧的)。 请帮助 ViewPort大小可以随时更改(2 – 100) 我无法完全加载所有区块,因为我需要分析可见区域中的区块 class Map { public List<Chunk> { get; set; } public int viewPortWidth = 2 … 100; public int viewPortHeight = viewPortWidth; public Vector2Int playerPosition { get; set; } } class Chunk { Tile[] Tiles { get; set; } public int chunkWidth = 16; public int chunkHeight = chunkWidth; […]

用Pyglet加载平铺的地图

我正在试图加载一个TMG文件与pyglet和pytmx 。 我想分别加载地图的图层,因为我将把图层放置在视差中。 理想情况下,我希望每个图层都是一个pyglet image ,我可以使用image.blit()命令直接将image放到窗口中。 我知道将每个图层设置为一个Sprite对象并在包含这个Sprites的批处理上调用draw()会更有效率,但是现在我希望背景图层是图像对象。 (我想这是因为我正在移植来自不同框架的代码,我想尽可能地与原始代码紧密结合。) 不幸的是,pytmx的实验pyglet模块缺less文档,而文档给出的例子会调用错误的方法。 这是我到目前为止所尝试的。 import pyglet import pytmx from pytmx.util_pyglet import pyglet_image_loader class TiledMap: def __init__(self, filename): self.tmxdata = pytmx.TiledMap(filename, colorkey = BLACK) # load tmx data in pyglet friendly way self.width = self.tmxdata.width * self.tmxdata.tilewidth self.height = self.tmxdata.height * self.tmxdata.tileheight def render_layer(self, layer_name, surface): for layer in self.tmxdata.layers: […]

如何在使用光滑的2D库时获取当前位置?

我正在开发一个简单的游戏,使用光滑的2D库的地图种类,我想获得用户的当前位置。 当用户跑到一个特殊的位置(例如:洞)来表明这是危险的。 我怎样才能做到这一点? 我是一个新来的游戏。

将精灵移动到平铺地图上

我正在使用Java开发基于瓦片的游戏。 我有一个GridLayout中的二维数组tile(JComponents),这对创建世界(我认为)是很好的,但我很难在平铺之间平滑地移动精灵。 目前,每个JComponent贴图根据表示状态的布尔值(即显示精灵或不显示精灵)绘制世界和精灵,但是,这不是光滑的。 精灵从一个瓷砖中消失,出现在另一个瓷砖上。 关于如何顺利移动精灵的任何想法? 我是整个游戏开发新手,所以请耐心等待。 问候,杰克亨特

谷歌地图层的战略游戏

我find了一个类似于我的游戏想法的网站http://e-sim.org/googleMap.html 。 但是我对游戏地图的开发没有经验。 任何人都可以分享想法如何做类似的function,如地图,例如如何指示邻里的位置? 任何更好的想法二维地图

如何轻松地确定SFML 2.0中平铺地图的textureRect?

我正在创建一个2D地图原型,并且我已经遇到了它的渲染位。 我有一个瓷砖瓷砖,每个瓷砖是30×30像素,并有一个1px的边界来界定它们。 在SFML中,绘制tileheet的一部分的常用方法是用矩形坐标声明IntRect,然后将setTextureRectangle()方法调用为精灵。 在一个小游戏中,它可以工作,但是我有45块以上的图块,每天添加更多,我不能为每个材质声明45个intRects,地图还没有优化,如果我不得不打电话,情况会更糟糕setTextureRect()方法,除了声明45个矩形。 我怎么能简化这个任务? 我需要的是一个非常简单和灵活的解决scheme,用于提取瓷砖的区域。 基本上我有一个瓷砖类。 我创建了多个贴图实例(vector),每个贴图都有一个位置和一个材质。 我parsing一个地图文件,当我parsing它,我根据parsing的地图文件设置地图的材料,我所需要做的就是渲染。 基本上我需要做这样的事情: switch(tile.getMaterial()) { case GRASS: material_sprite.setTextureRect(something); window.draw(material_sprite); break; case WATER: material_sprite.setTextureRect(something); window.draw(material_sprite); break; // handle more cases }

caching这样的瓷砖是个好主意吗?

我有一个2d的int数组,表示像这样的级别的瓷砖: 0000000000000000000000 0000000000000000000000 0000000000000000000000 1111111111111111111111 我有一个tileset向量,其中每个元素都有自己的tileX和tileY值(tileset图像中tile的位置),碰撞数据等等。所以,当我每次绘制一个tile时,我会问他们这个: draw(tileset[currentTile]->tx, tileset[currentTile]->tY, tileWidth, tileHeight); 但是,正如你所看到的,迭代for循环时会有很多相同的元素,所以我需要在level类中保存lastCollisionDatavariables,以减less分别访问每个tile的时间。

如何使基于瓦片的2D地图

我正在做一个游戏,需要制作一个基于tile的2D地图。 一个类似于我想要的东西的例子就是像“自行车比赛”这样的赛车游戏,地图只是一些线条。 虽然之前我已经制作了基于2D的游戏,但都使用地图编辑器和自己编程,我不知道从哪里开始制作这样的地图types。 有没有用来制作这种地图的程序? 如果没有,我该怎么办呢? 只需在图像编辑器中绘制线条,然后将对象编程到图像上,然后在线上设置碰撞检测,以便玩家不能通过它。

在瓷砖地图中建筑物布局(模式匹配)

我正在建立一个小的RTS,在我的代码中,我给了我的建筑物一个图案,就像你在俄罗斯方块中做的那样,也就是说我想在地图上放置不规则形状的建筑物而没有重叠。 地图可以是100×100,我的结构可以如下: OXO XXX XXX 我目前正在使用暴力技术来检查每个构建单元是否针对地图中的单元格。 有一个更容易/更好的方式来检查瓷砖地图的匹配模式?