UF Game 游戏开发

分享游戏开发的经验和技巧,包括各种游戏开发套件和工具的使用

如何将栅格图像边缘vector化为SVGpath?

我在计算如何将2D列表转换为表示政治地图边界的SVGpath时遇到了很多麻烦。 我完成了二维地形发生器的所有部分,包括气候模拟,河stream,湖泊,降雨,温度,生物群落,最后是地区。 最后一部分是问题所在。 整个脚本是用Python编写的。 我有一个地区列表,这些地区被表示为具有多个属性的字典。 其中之一是颜色,用作ID和输出一个漂亮的地图。 另一个是像素列表,边界列表和邻居列表。 像素指的是在该领土的所有点。 领土可以被认为是一个多边形。 它们具有边界像素,这些像素被定义为不属于这个区域的任何外部(意味着不是像素列表的一部分)像素(不管它是河stream,海洋还是无主像素)。 我也保留邻居地区的名单。 现在,我只能真正需要边界时,无法高效地在数据库中存储〜3000个坐标的数组。 我的目标只是绘制世界地图,在上面的图层中绘制每个领土的边界。 所以我需要将边框转换为SVGpathstring。 生成器完成时,边界列表是无序的。 对于每个边界像素,我围绕像素顺时针旋转并寻找另一个像素,逐步创建一个SVGpathstring。 我似乎无法有效地parsing边界没有被卡住 。 另一个问题是,领土中间可能有“湖泊”,边界也会增加。 这些不必包含在pathstring中。 领土也可以水平环绕(例如Google Maps),将领土分成两部分。 所以我的algorithm的最终结果理想情况下是一个SVGpath列表,每个SVGpath代表地区多边形的各个部分。 但是,我如何有效地做到这一点? 有没有另外一种方法可以有效地存储一个可能的数千个代表该领土形状的坐标列表? 从海岸线伸出的每条白线都是一条河stream。 你也可以看到在绿色领土中间的一个湖。 PS:我不确定一个标题,如果一个国防部想要改变它。

如何在基于组件的实体系统中提供属性可扩展性?

这个问题及其答案违背了利用一个实体组件系统,其中组件本身就是一个通用的类 ,其中的组件 属性/属性是一个dynamic容器 。 这个线程的一些定义: 实体=标识+组件集合 Component =属性/属性的容器( std::map<attribute_name, attribute_value> ),如健康状况,年龄,姓名,性别等 我理解并意识到这些缺点(没有编译时types的安全性,增加了从容器中查找值的开销)。 尽管如此,我目前正在使用这样的系统进行研究,并提出以下的论点,我现在想要对这个论题进行testing: 数据驱动的devise。 如果组件的所有属性都在dynamic容器中,那么在源代码之外添加新的属性是很容易的(实际上可能是这样)。 所以你以后可以很容易地编写新的属性。 而倾销/保存组件的状态是小菜一碟。 与上面提到的线程的建议相比,我也有一个自己的类为每个组件,直接实现一些基本的行为和辅助方法(但也需要从容器中查找它们的值)。 例: 我的组件基类有一个所有的属性/属性的地图: typedef std::map<std::string, PropertyBase*> PropertyMap; 所以一个实际的组件看起来如下所示。 在构造函数中,我通过将它们添加到地图来填充组件所具有的属性。 后来我可以阅读和更新它们,如果需要的话,但总是会有性能损失,因为我首先必须在std::mapfind它们。 class Person : public ClonableComponent<Person> { public: Person(ComponentFactory* const pFactory, ComponentType type, ComponentID id, GameEntity* const pEntity) : ClonableComponent(pFactory, type, id, pEntity) { // General addProperty(new Property<int>("age", PROP_INT, […]