Lua中如何返回已排序列表的索引
2016-2-10 18:28:26
收藏:0
阅读:107
评论:3
我使用索引号访问对象属性
object = {}
object.y = {60,20,40}
object.g = {box1,box2,box3} -- graphic
object.c = {false,false,false} -- collision
-- object.y[2] is 20 and its graphic is box2
-- 按照y位置排序,索引应该是object.sort = {2,3,1}
我知道table.sort可以对列表进行排序,但是如何对y列表进行排序并返回索引,以便根据y位置绘制每个对象放在前面?
也许可以编辑quicksort函数,但我不理解它。 http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Lua
https://github.com/mirven/lua_snippets/blob/master/lua/quicksort.lua
这可能吗?
点赞
用户5352026
这应该可行:
local temp = {}
local values = object.y
-- 用所有索引填充temp
for i=1,#values do
temp[i] = i
end
-- 使用object.y作为比较方法对索引进行排序
table.sort(temp,function(a,b)
return values[a] < values[b]
end)
-- 排序完成,愉快的使用它吧
object.sort = temp
当将这个代码与您的代码结合使用时,temp将为{2,3,1}。
2016-02-10 11:43:26
用户5893999
这是我收到的答案的最终版本。我的问题已经解决了。
使用sortIndex(object)可以在object.sort中获取排序列表。对象移动后更新排序。
box1 = love.graphics.newImage("tile1.png")
box2 = love.graphics.newImage("tile2.png")
box3 = love.graphics.newImage("tile3.png")
hero = love.graphics.newImage("hero.png")
object = {
{ x = 200, y = 50, g = box1 },
{ x = 50, y = 100, g = box2 },
{ x = 150, y = 200, g = box3 },
{ x = 0, y = 0, g = hero }
}
function sortIndex(item)
-- Sort id, using item values
local function sortY(a,b)
return item[a].y < item[b].y
end
--------------------------------
local i
local id = {} -- id list
for i = 1, #item do -- Fill id list
id[i] = i
end
-- print( unpack(id) ) -- Check before
table.sort(id,sortY)-- Sort list
-- print( unpack(id) ) -- Check after
item.sort = id -- List added to object.sort
end
sortIndex(object) -- print( unpack(object.sort) ) -- Check sorted id's
function drawObject()
local i,v, g,x,y
for i = 1, #object do
v = object.sort[i] -- Draw in order
x = object[v].x
y = object[v].y
g = object[v].g
love.graphics.draw(g,x,y)
end
end
2016-02-11 07:08:53
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
不要按照当前的方式存储数据。使用以下方式:
object = { { y = 60, g = box1, c = false, }, { y = 20, g = box2, c = false, }, { y = 40, g = box3, c = false, }, }然后在
table.sort中使用以下回调函数:function CustomSort(L, R) return L.y > R.y end如下所示:
table.sort(object, CustomSort)