网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月28日漏签0天
godot吧 关注:9,042贴子:40,652
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 11回复贴,共1页
<<返回godot吧
>0< 加载中...

【小工具发布】从色块图生成地图块的小工具

  • 只看楼主
  • 收藏

  • 回复
  • MWBIMH
  • godot
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一开始想搞这个是想做p社风格的游戏地图,但是找了很久都没有找到相关的讨论,openCV里有提取轮廓的方法,但是也不能满足我的要求,还是去年刷b站看到有个老哥做了个类似的游戏,但是方法也比较局限。后来想做的那个游戏搁置了,也就放下了。最近又想起这个事儿,就花了点时间写了这个工具,用来分割地图或者生成地图。思路以及B站老哥的视频链接和小工具的开源链接放在二楼。写这篇帖子一是工具发布,二是方便后来人查找。
至于为什么用Godot,主要是用Godot写ui比较简单,性能嘛就凑合凑合。


  • MWBIMH
  • godot
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
B站老哥的思路比较简单,就是逐像素读取信息然后根据颜色生成对应模型,局限就是只能做成3d,而且画地图流程和游戏逻辑流程没有分开,其实是个隐患,对画地图的要求也稍高一点,因为要求每块的颜色都不同。
根据以上问题可以进行第一次改进,老哥的方法是全图锁定唯一色号生成目标地块,但其实我们可以用bfs提取颜色相同(或相近,需要容差),的像素点生成地图块,然后对地图块进行编号。这样根据四色定理,我们只需要四种颜色就可以画出我们想要的每一张平面地图,然后画地图流程和游戏逻辑部分采用编号进行沟通,在后续的游戏制作中也比较有好处。这样对于3d游戏就已经够用了,但是对2d游戏却仍然没法用,只能生成一张方形的texture,要实现点击还需要自己完成判断点击的部分,比较麻烦(当然也不是不能做)。
接下来就是进一步的改进:通过一定方法描出色块的边,使用的时候根据边点来生成多边形即可。当然说着好像很容易,只要找到边就好,那么在bfs的过程中判断是不是边就行了。一开始我也是这么干的,笑死,根本画不出来。因为图形api绘制多边形是一个点一个点连起来,然后填充内部,就是需要点序列顺序相连,能构成一个单连通区域。
要解决这个问题,就比较麻烦了,可以首先找到一个边点,然后检查周围的点,如果有合法(即没有超出当前色块)的点,就向那个点前进。但是按什么顺序检查周围的点就成了问题……。最终方案是从前一个点顺时针(当然逆时针也行,只不过要全图统一)旋转,向找到的第一个点前进,当目标等于起始点时退出即可。这里的旋转就要引入旋转矩阵了,具体的可以参考线代教材。到这里核心部分就算完成了,复杂度应该是o(n),还是可以的。其实算法本身挺简单的,但也不至于入门级水平,不知道为什么不见人讨论。
剩下能做的还有寻邻和边点压缩,还没做就不赘述了。


2025-08-28 14:26:29
广告
不感兴趣
开通SVIP免广告
  • 人类的大敌
  • 吧主
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
其实关于相关功能的讨论,我个人还是觉得挺复杂的,我还从没见过线代教材,提取轮廓算法也没有实现过,让我来实现估计会采用更人工的方法:手动画多边形……


  • 亚托克斯在咆哮
  • 跨平台
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个寻邻的话,有什么好用的方法吗大佬讲一讲


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 11回复贴,共1页
<<返回godot吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示