ROBLOX - 修复六边形地形中的空隙
2015-10-29 17:13:8
收藏:0
阅读:102
评论:1
所以,我一直在折磨着来自这里的一些地形图代码
在玩弄参数后,我改变了六边形形状的一部分,并用它制作了一个漂亮的类似于钻石的形状,但问题是,在六边形边不连接的地方有间隙,如此显示
下面是负责生成代码等的代码:
local size = Vector3.new(10, -- width的数量
10, -- heightmap的步数
10) -- length的数量
local base = script.Parent -- 要替换为地形的部分
math.randomseed(tick() % 1e5)
for x = 1, size.x do
for z = 1, size.z do
local y = x + z
wait()
local tile = game.ServerStorage.Hexagon:Clone()
local position = Vector3.new(x-1, 0, z-1) * tile.Size
tile.Size = tile.Size * Vector3.new(1, y, 1)
tile.CFrame = CFrame.new(tile.Size/2) --平移部分一半的大小,以便我们可以定位角落
tile.CFrame = tile.CFrame - base.Size / 2 --将其移动到基底的一个角落
tile.CFrame = tile.CFrame + position --将其放在正确的位置上
tile.CFrame = base.CFrame * tile.CFrame --将它移动,使它与基底表面平齐
tile.Parent = workspace
if tile.Position.Y < 30 then
tile.BrickColor = BrickColor.new("Brown")
elseif tile.Position.Y > 30 and tile.Position.Y < 100 then
tile.BrickColor = BrickColor.new("Bright green")
end
end
end --每个循环的结尾
base:Destroy()
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
我认为这个问题的解决方案在于如何设置位置。试试这个:
local position = (Vector3.new(.75, 0, -.5)*(x-1) + Vector3.new(.75, 0, .5)*(z-1))*tile.Size编辑:
完整的代码(它还将瓷砖组成“大六边形”而不是“大菱形”):
local size = 10 -- 大六边形沿边有多少个瓷砖 local base = script.Parent -- 要替换地形的部件 math.randomseed(tick()%1e5) for x = 0, 2*size do for z = 0, 2*size do if ((x + z)/size - 2)^2 > 1 then break end local y = x+z wait() local tile = game.ServerStorage.Hexagon:Clone() local position = Vector3.new(.75*(x+z), 0, .5*(z-x)) * tile.Size tile.Size = tile.Size * Vector3.new(1, y, 1) tile.CFrame = CFrame.new(tile.Size/2) --移动部分大小的一半,以便我们可以定位角落 tile.CFrame = tile.CFrame - base.Size / 2 --将其移到底座的一个角落 tile.CFrame = tile.CFrame + position --放在正确的位置上 tile.CFrame = base.CFrame * tile.CFrame --将其移动到与底座的表面平齐的位置 tile.Parent=workspace if tile.Position.Y < 30 then tile.BrickColor = BrickColor.new("Brown") elseif tile.Position.Y > 30 and tile.Position.Y < 100 then tile.BrickColor = BrickColor.new("Bright green") end end end -- 由于每个for循环都有一个结束符号 base:Destroy()