Articles of 六角形

Cocos2d(Python)中的批量z顺序问题

我有一个奇怪的问题,我的hexmap绘图代码。 我的代码使用“挤压”六边形来实现伪等距视图。 因此,在屏幕上绘制它们的顺序非常重要。 值得庆幸的是,我正在使用三次方坐标,所以我可以将其中的一个作为所讨论的精灵的z级别。 我已经把它放在代码中,它几乎可以工作。 问题在于程序有时会产生exception的(和丑陋的)结果,尽管有相同的input。 对我来说,它看起来像一些精灵忽略我为他们设置的Z级。 看一看: 按照预期在左边工作,并在右边打破。 截至目前,我不知道哪个因素导致这个错误 – 连续三次脚本发布可以有任何好的和坏的结果的组合。 这是我的代码准系统版本。 我把所有不必要的部分都剥离了,只留下了关键的元素。 它基于Cocos2d(Python)库。 Hexmap以Hex(q,r,s)元组作为键存储为OrderedDict。 在绘制之前,所有的精灵都被打包成一个适当的z级别的批次。 按任何鼠标button强制程序重绘地图(这总是消除了问题 – 直到下一次启动)。 import os os.environ['PYGLET_SHADOW_WINDOW']="0" import pyglet import cocos import collections import math Hex = collections.namedtuple("Hex", ["q", "r", "s"]) Point = collections.namedtuple("Point", ["x", "y"]) Orientation = collections.namedtuple("Orientation", ["f0", "f1", "f2", "f3", "b0", "b1", "b2", "b3", "start_angle"]) Layout […]

二维六边形网格上的碰撞检测

我正在使用Cocos2D制作一个休闲的基于网格的2D iPhone游戏。 网格是一个“交错”的六角形网格,由均匀大小和间隔的圆盘组成。 看起来像这样 我已经将网格存储在二维数组中。 另外我有一个“周围”的网格单元的概念。 即围绕特定单元的六个网格单元(除了可能less于六个的边界上的网格单元)。 无论如何,我正在testing一些碰撞检测,并没有按照我的计划好。 以下是我目前正在接近静止光盘组的移动光盘的碰撞检测: 使用移动单元格的xy位置计算最接近移动单元格的网格单元格的ij坐标 使用ij坐标获取周围网格单元格的列表 检查周围的细胞。 如果他们都是空的,那就不要碰撞 如果我们有一些非空的周围细胞,然后比较光盘中心之间的距离一些碰撞所需的最小距离 如果发生碰撞,则将移动的光盘置于网格单元ij中 所以这个工作,但不是太好。 我已经考虑过一个更简单的蛮力方法,我只是比较在游戏循环的每一步移动的光盘和所有的固定光盘。 由于固定的盘片数量是最大值300,所以在性能方面可能是可行的。 如果不是这样的话,那么可以使用一些空间划分的数据结构,然而这种结构感觉太复杂 在这样的游戏中碰撞检测有哪些常见的方法和最佳实践? 编辑 – 更多信息 :目前的实施有一些错误,如光盘有时会粘在占用的网格插槽。 把光盘放入小空间也太困难了。 这些都是可以修复的。 我在这里只是想了解其他方法。

在六角形网格上沿边移动的最简单方法是什么?

我有一个半径可变的六边形网格。 我的实体每回合可以移动2格。 我应该如何计算下一步走向边界,然后绕地图顺时针行驶? 在边界的首选移动 角色应该停留在边界,而每转逆时针方向。 在中间举例移动 角色应该每回合移动1或2格。 我找不出简单的math来做到这一点。 编辑: 这就是我在边界做运动的方式 var x = pos.x; var y = pos.y; var z = -pos.x-pos.y; var dx = 0; var dy = 0; if (x == -radius && z > 1) { dy = 2; } else if (x == -radius && z == 1) { dx = […]

转换六边形网格坐标系

正如我一直在建立一个基于内置在javascript中的六边形网格的RTS游戏。 我偶然发现了一个关于坐标系的问题。 一直试图实施一个A星级系统来查找path。 但是,当涉及到奇数和偶数时,水平的六角形网格可能会导致一些问题。 它是水平的,因为它是呈现方式,使所有graphics不重叠不当。 所以现在到我的问题后,一些挖在网上。 你如何转换水平和60度的坐标? 已经试过这个代码,但它不够好,并坚持什么我缺less我的两个函数GetWorldXpos和GetWorldYpos 。 function DrawHex(context, hexagonData, isEven, x, y) { var heightValue; heightValue = GetIntNoDecimals(hexagonData.heightValue); //parseInt(hexagonData.heightValue, 10); //sets up so if the height of sea-levels is achived it should be equal level heightValue = CheckForLakeLevel(heightValue); //Gets color code depengin on height var colorCode = GetColorCode(heightValue, hexagonData.heightValue); if(isEven){ //creates and […]

hex轴坐标到表格坐标转换

我正在开发基于hex地图的networking游戏。 我正在存储我的数据基于轴坐标系统。 我开发了一个函数,它显示了在给定hex的$distance内的hex的轴向坐标。 现在我想以HTML表格的forms显示这些格式。 我所拥有的数据只是中心hex的轴向坐标以及距离内的hex轴向坐标列表(不以任何方式sorting) 如下面的转换scheme所示,可以总是以简单的HTML表格的forms显示: 但是我正在努力如何获得表格的正确表格字段(行/列)中显示的每个地图格式,假定表格编号如下所示: 为了解决这个问题,在我看来,首先我需要确定我需要的HTML表的大小。 如果我能够确定什么是HTML表格的中心的表格坐标比我能够find每个hex的本地化参考中心hex。 在$distance = 1情况下,我需要3列和3行: 在$distance = 2情况下,我需要5列和5行: 这使我得出结论,我所需的HTLM表大小是: $distance *2 + 1 中间的hex位于桌子的中间,所以它的坐标是 ($distance *2 + 2) /2 但接下来呢,如何将轴坐标转换成表格坐标呢?

XNA – 制作二维六边形互相连接

嘿,所以我正在XNA上面做一个自上而下的2D策略游戏,而这些瓷砖是六边形的。 由于游戏机制,我不能拥有一个网格,所以一切都有自己的位置,并且每个图块对象都存储在一个列表中。 我想要做的是如果你把一块瓷砖贴在另一块瓷砖的旁边,它们会拼在一起成为一个对象。 我似乎无法弄清楚如何得到它应该捕捉的一面。 红色代表我想检查鼠标点击的不同部分(这些当然不是游戏中的实际纹理)。 白色代表如果你点击的区域,它不会让你放置一个瓷砖,因为它会在另一个之上。 我能想到的最接近的是在从中心到边缘被分成三角形的实际瓷砖周围有一个更大的六角形,但是我不知道如何去做。 我将把它移动到与Monogame的Windows Phone,我不认为手机是足够快,使某种事物,检查每个部门的颜色,所以我不认为它可以基于纹理。 我觉得这样做有一些相对简单的math,但我似乎无法弄清楚。 任何帮助将不胜感激。 谢谢!

坐标系统的战略游戏

我正在开发一个简单的3D战略游戏的个人项目。 我正在自己的游戏引擎上工作(假设我必须拥有自己的游戏引擎),而且我有一个理论问题。 如何开发合适的坐标系,这将是可扩展的,并提供最好的可读性? 我决定X,Y坐标系统(不同的单位覆盖不同的空间 – 简单的矩形)和六角形系统(大单位需要更多的六边形)。 我正在这里为每个玩家(甚至是建筑物)提供三种不同尺寸的三种不同单位的简单概念,并通过冲突解决scheme进行碰撞检测。 谢谢。

地图坐标系统

我打算在我的游戏中实现非常大的地图。 我不会一次显示所有的地图,而只是选定的一部分。 此外,我需要连接到更大的块(省),并显示他们完全。 我正在考虑使用hex地图。 – 你能推荐任何有关在hex地图上处理坐标的手册吗? – 我正在寻找在地图上存储hex位置的好方法,这样就可以很容易地find附近的hex,而不必一次加载所有的地图。 也许你也可以推荐一些可靠的hex地图的替代品? 我被限制在2d。

在Android上绘制六边形网格

我试图在我的Android应用程序中绘制一个六边形网格。 我不想在这里重新发明轮子,所以我正在寻找一些框架/库或只是一些基本的想法,应该如何做到这一点。 你有什么想法吗? 我到目前为止发现的: 一些math,但不适用于Android 不错,但不适合java

为什么libGDX的HexagonalTiledMapRenderer添加额外的空间?

HexagonalTiledMapRenderer渲染时,为什么在这些格子之间有大的空间? 瓷砖是黑色的边界,但是这不占所有额外的空间。 通过修改Tiled生成的.tmx文件,我也能够把它们拉得更近。 图片显示了贴合在一起的瓷砖。 左边和底边用橙色瓷砖填充。 您可以看到地图属性为平铺宽度156,平铺高度96,边长0,交错轴x,交错索引奇数和平铺渲染顺序。 显示由HexagonalTiledMapRenderer在游戏中呈现的贴图的图片 如果我将标记的tilewidth属性编辑为100而不是166,则显示游戏渲染的内容 我将下面的图像导入到Tiles中,使用宽度156,高度96,边距0,间距0和透明颜色白色。 我从libGDXtesting中获得了一个。 由Tiled生成的test3.tmx: <?xml version="1.0" encoding="UTF-8"?> <map version="1.0" orientation="hexagonal" renderorder="right-down" width="25" height="25" tilewidth="166" tileheight="96" hexsidelength="0" staggeraxis="x" staggerindex="odd" nextobjectid="1"> <tileset firstgid="1" name="hexes" tilewidth="60" tileheight="52" tilecount="16"> <image source="hexes.png" trans="ffffff" width="256" height="256"/> </tileset> <tileset firstgid="17" name="hexes" tilewidth="82" tileheight="52" tilecount="12"> <image source="hexes.png" trans="ffffff" width="256" height="256"/> </tileset> <tileset firstgid="29" name="1" tilewidth="112" tileheight="97" […]