我正在使用一个图形库,可以让你在Lua中编程。我需要A *寻路库,所以我在网上找到了一个。它只是一个lua文件,它执行路径查找和一个示例文件。在示例文件中,它使用如下对象:
-- Loading the library
local Astar = require 'Astar'
Astar(map,1) -- Inits the library, sets the OBST_VALUE to 1
我运行脚本,一切正常。所以现在我将Astar.lua文件添加到我的图形引擎运行的路径位置并执行相同的操作,我在Astar(地图,1)行上得到错误:
“尝试调用本地'AStar'(数字值)
当我做与此AStar lib附带的示例相同的事情时,为什么我会收到该错误的任何想法?
以下是一些AStar文件
-- The Astar class
local Astar = {}
setmetatable(Astar, {__call = function(self,...) return self:init(...) end})
Astar.__index = Astar
-- Loads the map, sets the unwalkable value, inits pathfinding
function Astar:init(map,obstvalue)
self.map = map
self.OBST_VALUE = obstvalue or 1
self.cList = {}
self.oList = {}
self.initialNode = false
self.finalNode = false
self.currentNode = false
self.path = {}
self.mapSizeX = #self.map[1]
self.mapSizeY = #self.map
end
所以请注意,当我从我的图形引擎运行它时它返回1,但是当它从它附带的示例运行时它返回一个表,这应该是它应该返回的。所以不确定为什么它只会返回1。
答案 0 :(得分:11)
如何将Astar添加到示例脚本的package.loaded
表中,而不是代码?
QUICK LUA SYNTACTIC SUGAR REVIEW:
func 'string'
相当于func('string')
tabl.ident
相当于tabl['ident']
使用require('Astar')
运行脚本时,这就是它的作用:
package.loaded['Astar']
是否为非零值。
package.path
(和package.cpath
)中列出的模式的文件名。替换为'Astar',直到找到与模式匹配的第一个文件。package.loaded['Astar']
设置为true
。'Astar'
作为参数(在模块中可以作为...
访问)脚本)。package.loaded['Astar']
。package.loaded['Astar']
的内容。
package.loaded['Astar']
作为执行的一部分,并且不返回任何内容。正如上面评论中提到的那样,您的问题可能来自使用'A S tar'而不是'A s tar'加载模块。 Lua可能正在使用此字符串加载此脚本(因为,在不区分大小写的Windows上,搜索名为“AStar.lua”的文件将打开一个名为“Astar.lua”的文件),但脚本不是使用它进行操作(使用硬编码的"Astar"
而不是"AStar"
Lua正在加载脚本。)
答案 1 :(得分:5)
您需要在return Astar
的末尾添加Astar.lua
。