2011-08-01 15 views
8

Używam biblioteki graficznej, która pozwala programować w Lua. Potrzebuję biblioteki ze ścieżką A *, więc znalazłem ją w Internecie. To tylko 1 plik lua, który wykonuje plik pathfinding i 1 przykładowy. W przykładowym pliku używa obiektu:lua jak wymaga pracy

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

Uruchomę skrypt i wszystko działa. Teraz dodam plik Astar.lua do ścieżki, w której działa mój silnik graficzny i robię to samo, a otrzymuję błąd na linii Astar (mapa 1):

"próba połączenia lokalnego" AStar "(wartość liczbowa)

Jakieś pomysły dlaczego miałbym być uzyskiwanie ten błąd, gdy robię to samo, co na przykład, że pochodzi z tego Astar lib?

Oto mały pliku 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 

Należy pamiętać, że po uruchomieniu tego z mojego silnika graficznego jest ponownie toczenie 1, ale po uruchomieniu z przykładu, który przyszedł, zwróci stół, który powinien powrócić. Nie wiem więc, dlaczego powrócił tylko 1.

+1

Zauważam w komunikacie o błędzie '" próba wywołania lokalnego 'AStar' (wartość liczbowa) "', S jest napisane wielkimi literami. Czy to jest literówka z twojej strony, czy może używasz gdzieś niewłaściwej wielkości liter? – Alex

Odpowiedz

9

W jaki sposób Astar dodaje się do tabeli package.loaded dla skryptu przykładowego, w przeciwieństwie do kodu?

QUICK LUA składniowych SUGAR recenzja:

  • func 'string' jest równoważna func('string')
  • tabl.ident jest równoważna tabl['ident']

Po uruchomieniu skryptu za pomocą require('Astar'), to co ma:

  • sprawdza, czy package.loaded['Astar'] jest wartością zerową.
    • Jeśli tak, zwraca tę wartość. W przeciwnym razie kontynuuje tę listę.
  • Wykonuje nazwy plików wzorców wymienionych w package.path (i package.cpath), używając znaku "?" zastąpiony przez 'Astar', dopóki nie znajdzie pierwszego pliku pasującego do wzorca.
  • Zestawy package.loaded['Astar'] do true.
  • Uruchamia skrypt modułu (znaleziony przez przeszukiwanie ścieżki powyżej - dla tego przykładu przyjmujemy, że nie jest to moduł C) z 'Astar' jako argumentem (dostępny jako ... w skrypcie modułu).
  • Jeśli skrypt zwróci wartość, ta wartość zostanie umieszczona w package.loaded['Astar'].
  • Powoduje zwrócenie zawartości package.loaded['Astar'].
    • Należy zauważyć, że skrypt może załadować pakiet do package.loaded['Astar'] jako część jego wykonania i nie zwrócić nic.

Jak ktoś zauważył w powyższych uwag Twój problem może pochodzić z załadowaniem modułu używającego 'a S tar' zamiast 'A s tar'. Możliwe, że Lua ładuje ten skrypt za pomocą tego ciągu (ponieważ w systemie Windows nieobsługującym wielkości liter wyszukiwanie pliku o nazwie "AStar.lua" otworzy plik o nazwie "Astar.lua"), ale skrypt nie jest z tym działa (przy użyciu zakodowanego na stałe kodu "Astar" zamiast Lua ładuje skrypt pod).

5

Musisz dodać return Astar pod koniec Astar.lua.