2D 六边形网格
2017-6-2 2:54:41
收藏:0
阅读:185
评论:1
我最近使用 love2D 引擎创建了一个简单的 lua 类,通过绘制 6 个顶点并用线条描绘六边形,我想要做的事情之一是扩展到六边形网格,但是我不知道怎么做。
我找到的所有网站都没有帮助我解决问题,我也无法理解为什么。
这是我根据半径和 x 和 y 位置绘制顶点的函数。
我的六边形是尖顶风格的。
function hexagon.new(x,y,radius)
local hexagon=setmetatable({},hexagon)
hexagon.Vertices={}
hexagon.x=x or 0
hexagon.radius = radius or 10
hexagon.y=y or 0
for i=0,6 do
local angle = 2 * math.pi / 6 * (i + .5) -- 1 is what is multipled to 90(2*math.pi) so 1*90=90(flat-topped), 0.5*90=45(pointy-topped)
local x = hexagon.x + hexagon.radius * math.cos(angle)
local y = hexagon.y + hexagon.radius * math.sin(angle)
hexagon.Vertices[i]= {x=x,y=y}
end
return hexagon
end
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

以下是如何使用尽可能简化的函数在 Love2d 引擎(v. 0.10.2)中创建六边形并将其绘制到网格中的工作示例。
重要提示:适用于在圆上具有所有六个点且使用半径的六边形。对于所有六边形形状,此方法并不适用。
```
-- 让我们使用仅使用简单的函数在 (0,0) 位置中心创建六边形数据
-- table of 6 points hex = {}; -- 具有所有 6 个点位于圆上的六边形的半径 hex.radius = 10;
-- 简单的循环生成六边形 local i = 1 repeat
-- 完整圆有 2 弧度,而六边形有 6 个角点 -- 因此每个角点增加 1/3 Pi local direction = math.pi/3 * (i+0.5) -- 将六边形旋转 90 度:direction = math.pi/3 * i -- 生成空表以插入点协调 hex[i] = {}; -- 设置 x,y 坐标 hex[i].x = hex.radius*math.cos( direction ) hex[i].y = hex.radius*math.sin( direction ) i = i+1until i > 6
function love.draw( dt )
--使用三角函数获取两个六边形瓦片之间的距离 local jxOffset = hex.radius*-math.tan( math.pi/1.5 ) --或 math.sqrt(3) * hex.radius --通过此值偏移新线 local ixOffset = jxOffset/4 --使用方向和距离获取线之间的 “y” 偏移量 --我们得到了 jxOffset 中的距离,因此我们只需要应用方向 local iyOffset = jxOffset*math.sin( math.pi/3 ) --“i”= 行,“j”=行中的图块 local i = 1 repeat local j = 1 repeat love.graphics.push() --偏移可绘制位置(或在位置上绘制六边形瓦片): love.graphics.translate( ixOffset+j*jxOffset, i*iyOffset ) --在所有六边形点之间绘制多线段-创建六边形 love.graphics.line( hex[1].x,hex[1].y, hex[2].x,hex[2].y, hex[3].x,hex[3].y, hex[4].x,hex[4].y, hex[5].x,hex[5].y, hex[6].x,hex[6].y, hex[1].x,hex[1].y ); love.graphics.pop() j = j+1 until j > 5 --为每个新行反转 --保持行不增加 x 坐标 ixOffset = -ixOffset i = i+1 until i > 5end
如果我出错了,请原谅我,我在我的电脑上运行了代码并正常工作。如果您发现了任何错误,请评论并我会尝试修复它。