计算网格上实体位置(笛卡尔坐标),当实体和地面瓷砖的尺寸不同时
2019-4-23 9:46:27
收藏:0
阅读:109
评论:1
我正在尝试编写一个函数,告诉我玩家踩在哪个瓷砖上,已知 [ 地面瓷砖的尺寸 ] 不同于 [ 玩家瓷砖的尺寸 ]
我想要不惜一切代价避免循环整个地图。
不幸的是,我没有数学的水平,这意味着我不知道如何做到这一点。
我正在使用 2D 经典笛卡尔坐标系,就像任何经典 RPG 一样。
我试图计算我的玩家所在的第一个瓷砖,然后我迷失了方向。我无法再做更多了。
我做了像这样的事情:i = math.floor( entity.x / tile size ) Same for j
then index = ( i + 1 ) + j * nbTilesPerRow
实际结果:什么也没有。连我从上述公式得到的 [ 瓷砖索引 ] 都没有被发现。
function Map:ClickedTile( mouseX, mouseY )
local i = math.floor( mouseX / self.tile.size )
local j = math.floor( mouseY / self.tile.size )
local index = i + j * self.tile.width
return index
end
这段代码可以运行,并且给我点击的瓷砖索引。
我想要复制这个过程,找出所有玩家目前正在碰撞的瓷砖,同时避免循环整个地图。
样例数据:
瓷砖尺寸 = 32 * 32
玩家瓷砖尺寸 = 64 * 64
地图尺寸:25 * 19
感谢您的阅读。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

如果我理解正确的话,您希望在正方形{x=entity.x,y=entity.y,size=64}中获得地图瓦片。
获取所有位置:
function getPosition(map, square) local xpos = {} for i = square.x, square.x + square.size, map.tile.size do table.insert(xpos, math.floor(i / map.tile.size)) end local ypos = {} for i = square.y, square.y + square.size, map.tile.size do table.insert(ypos, math.floor(i / map.tile.size)) end return xpos, ypos end这样,您就可以在地图上得到正方形相交的所有{x,y}位置 (例如对于位置square = {x = 33,y = 33,size = 64},您可以得到xpos = {1,2,3})
然后您需要将x,y坐标转换为索引:
function positionToIndex(positions, mapWidth) local indexes = {} for position in ipairs(positions) do local index = i + j * mapWidth table.insert(indexes, index) end return indexes end local xpos,ypos = getPosition(map,entity) local position = listOfCoordinate(xpos,ypos)- 应该是很简单的 local intersectionIndexes = positionToIndex(position,map.tile.size)这有一些缺陷需要解决: