如何将游戏地图的图像文件转换为程序中的边界?

时间:2020-03-06 14:45:45  来源:igfitidea点击:

我有一张基本游戏地图的图像。可以将其视为无法交叉的水平和垂直墙。如何轻松地从墙壁的png图像转到代码中的某些内容?

困难的方法非常简单……这就是我更改图像映射时想要的一种简单方法,将其转换为代码。

谢谢!

编辑:地图不是基于图块的。它是自上而下的2D。

解决方案

我需要更多细节。

游戏基于图块吗?是3d吗?

如果基于图块,则可以将图像降采样到图块分辨率,然后对每个像素代表图块进行1:1转换。

如果我们不需要使用地图信息进行任何预先计算。我们可以使用类似getPixel(x,y)的函数来检入运行时逻辑。

我建议编写一个脚本,该脚本采用每个单独的像素并确定它是否代表墙的一部分(即黑色或者白色)。然后,对游戏进行编码,以便用像素表示的单个小块构建墙。不应该太辛苦...

我涉足电子游戏,我个人不希望麻烦检查地图上图片的边界。如果这些墙是刚好具有图像属性(或者类似属性)的对象,这会更干净吗?将显示图像,但是对象将具有定义明确的坐标,并且函数可以确定玩家每次移动时是否击中了对象。

好吧,我可以看到两种情况,其中有两种不同的"最佳解决方案",具体取决于图形来自何处:

  • 图形是平铺的,因此我们可以轻松地"识别"一个块,因为它使用与其他块相同的图形,并且我们所要做的就是一个程序,当给出"块状平铺"列表和地图时,可以生成通过将每个图块与"阻止列表"中的图块进行比较来生成"碰撞图"。
  • 图形只是一些图形(例如,可以是图片或者某些CG图形),并且我们不希望一个块的像素与另一个块的像素相同。我们仍然可以尝试在图片上应用"边缘检测"算法,但是我的猜测是,我们应该将图片分为BG层和FG层,以便FG层具有预定义的颜色(或者alpha = 0)并针对该颜色测试像素,以定义物体是否在阻塞。
  • 我们没有太多的遮挡形状,但是它们通常很复杂(多边形,椭圆形),并且使用世界的位图进行渲染或者打包为"瓦片属性"时效率不高。例如,点击式冒险游戏就是这种情况。在这种情况下,我们可能要使用矢量绘图程序创建与边界匹配的路径,并挖掘发生多边形相交或者贝塞尔曲线碰撞的库。

祝好运并玩得开心点。