2011-08-01 37 views
8

Tôi đang sử dụng thư viện đồ họa cho phép bạn lập trình trong Lua. Tôi có nhu cầu về thư viện hướng dẫn A * vì vậy tôi đã tìm thấy một trực tuyến. Nó chỉ là 1 lua tập tin mà các pathfinding và 1 ví dụ tập tin. Trong tệp mẫu, nó sử dụng đối tượng như:lua cách yêu cầu hoạt động

-- Loading the library 
local Astar = require 'Astar' 
Astar(map,1) -- Inits the library, sets the OBST_VALUE to 1 

Tôi chạy tập lệnh và mọi thứ hoạt động. Vì vậy, bây giờ tôi thêm tệp Astar.lua vào vị trí đường dẫn nơi công cụ đồ họa của tôi đang chạy và làm điều tương tự và tôi gặp lỗi trên dòng Astar (bản đồ, 1):

"cố gắng gọi địa phương 'AStar '(một giá trị số)

Bất cứ ý tưởng tại sao tôi sẽ nhận được rằng lỗi khi tôi đang làm điều tương tự như ví dụ mà đi kèm với lib Astar này?

Dưới đây là một chút của tập tin 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 

Vì vậy, lưu ý rằng khi tôi chạy điều này từ công cụ đồ họa của tôi, nó lại chuyển 1, nhưng khi chạy từ ví dụ mà nó đi kèm với nó trở về một bảng, đó là những gì nó cần được trả lại. Vì vậy, không chắc chắn lý do tại sao nó sẽ chỉ trở lại 1.

+1

Tôi nhận thấy trong thông báo lỗi '" cố gắng gọi địa phương 'AStar' (giá trị số) "', S được viết hoa. Đó có phải là lỗi đánh máy của bạn hay bạn có thể sử dụng viết hoa sai ở đâu đó? – Alex

Trả lời

9

Astar được thêm vào bảng package.loaded cho tập lệnh mẫu, thay vì mã của bạn như thế nào?

NHANH LUA cú pháp đường ĐÁNH GIÁ:

  • func 'string' tương đương với func('string')
  • tabl.ident được tương đương với tabl['ident']

Khi bạn chạy một kịch bản sử dụng require('Astar'), đây là những gì nó:

  • kiểm tra xem package.loaded['Astar'] có phải là giá trị không phải không.
    • Nếu có, nó sẽ trả về giá trị này. Nếu không, nó sẽ tiếp tục trong danh sách này.
  • Chạy qua tên tệp của các mẫu được liệt kê trong package.path (và package.cpath), bằng '?' thay thế bằng 'Astar', cho đến khi tìm thấy tệp đầu tiên khớp với mẫu.
  • Đặt package.loaded['Astar'] thành true.
  • Chạy tập lệnh mô-đun (tìm thấy thông qua tìm kiếm đường dẫn ở trên vì ví dụ này, chúng tôi giả định đây không phải là mô-đun C) với 'Astar' làm đối số (có thể truy cập dưới dạng ... trong tập lệnh mô-đun).
  • Nếu tập lệnh trả về một giá trị, giá trị này được đặt vào package.loaded['Astar'].
  • Nội dung của package.loaded['Astar'] được trả lại.
    • Lưu ý rằng tập lệnh có thể tải gói này vào package.loaded['Astar'] như một phần của quá trình thực hiện và không trả lại gì.

Như ai đó đã nói trong các ý kiến ​​trên, vấn đề của bạn có thể đến từ nạp môđun bằng 'A S tar' thay vì 'Một s tar'. Có thể Lua đang tải tập lệnh này bằng chuỗi này (vì, trên Windows không phân biệt dạng chữ, tìm kiếm tệp có tên "AStar.lua" sẽ mở tệp có tên "Astar.lua"), nhưng tập lệnh không phải là hoạt động với điều đó (bằng cách sử dụng mã hoá cứng "Astar" thay vì "AStar" Lua đang tải tập lệnh theo).

5

Bạn cần thêm return Astar vào cuối Astar.lua.

Các vấn đề liên quan