2011-08-01 57 views
8

我正在使用一個圖形庫,讓你在Lua中編程。我需要A *尋路庫,所以我找到了一個在線。這只是一個lua文件,可以進行路徑查找和1個示例文件。在示例文件中,它使用如下對象: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 '(一個數值)

任何想法,爲什麼我會得到當我在做同樣的事情,隨此愛仕達lib中的例子錯誤?

這裏是一個小的愛仕達文件

-- 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.

+1

我注意到在錯誤消息「」嘗試調用本地'AStar'(數字值)「',S是大寫。這是你的錯字還是你可能在某處使用了錯誤的大寫字母? – Alex

回答

9

與示例代碼相反,Astar如何被添加到示例腳本的package.loaded表中?

QUICK LUA語法糖導讀:當您運行使用require('Astar')腳本

  • func 'string'相當於func('string')
  • tabl.ident等同於tabl['ident']

,這是什麼它的確如此:

  • 檢查package.loaded['Astar']是否爲非零值。
    • 如果是,則返回此值。否則它繼續下面這個列表。
  • 通過package.path(和package.cpath)中列出的模式的文件名運行,'?'替換爲'Astar',直到找到與該模式匹配的第一個文件。
  • package.loaded['Astar']true
  • 'Astar'作爲參數(可在模塊腳本中以...訪問)運行模塊腳本(通過上面的路徑搜索找到,爲了舉例說明,我們假定它不是C模塊)。
  • 如果腳本返回一個值,則將該值置於package.loaded['Astar']中。
  • 返回package.loaded['Astar']的內容。
    • 請注意,腳本可以將程序包加載到package.loaded['Astar']作爲其執行的一部分,並且不返回任何內容。

正如有人在上面的評論中指出,您的問題可能來自使用加載模塊「A 小號焦油」,而不是「A 小號焦油」。有可能Lua使用這個字符串加載這個腳本(因爲在不區分大小寫的Windows上,搜索名爲「AStar.lua」的文件將打開一個名爲「Astar.lua」的文件),但腳本不是與此操作(通過使用硬編碼"Astar"而不是"AStar" Lua正在加載腳本)。

5

您需要在Astar.lua的末尾添加return Astar