Tentative d'indice local (une valeur booléenne)
J'ai 2 fichiers Lua, main.lua
et game_model.lua
. J'essaie de sauver quelques détails dans un fichier JSON (j'ai googlé que l'utilisation d'un fichier JSON serait le meilleur moyen pour enregistrer les paramètres d'un utilisateur et le score), mais j'obtiens l'erreur suivante:
Erreur: Fichier: main.lua
Ligne: 11
Tentative d'indice local " jeu " (une valeur booléenne)
Pourquoi j'obtiens cette erreur et comment la corriger?
Voici le code dans mon main.lua
:
--Main.lua
display.setStatusBar( display.HiddenStatusBar )
local composer = require( "composer" )
local game = require("data.game_model")
myGameSettings = {}
myGameSettings.highScore = 1000
myGameSettings.soundOn = true
myGameSettings.musicOff = true
myGameSettings.playerName = "Andrian Gungon"
game.saveTable(myGameSettings, "mygamesettings.json")
composer.gotoScene("scripts.menu")
game_model.lua
(dans le data
sous-répertoire) contient ce code:
--game_model.lua (located at data/game_model.lua)
local json = require("json")
function saveTable(t, filename)
local path = system.pathForFile( filename, system.DocumentsDirectory)
local file = io.open(path, "w")
if (file) then
local contents = json.encode(t)
file:write( contents )
io.close( file )
return true
else
print( "Error!" )
return false
end
end
function loadTable(filename)
local path = system.pathForFile( filename, system.DocumentsDirectory)
local contents = ""
local myTable = {}
local file = io.open( path, "r" )
if (file) then
local contents = file:read( "*a" )
myTable = json.decode(contents);
io.close( file )
return myTable
end
return nil
end
OriginalL'auteur Andrian Gungon | 2014-12-13
Vous devez vous connecter pour publier un commentaire.
Cela signifie que le module
data.game_model
n'a pas renvoyé de quoi que ce soit quand il a été chargé.Dans ce cas,
require
retournetrue
.OriginalL'auteur lhf
Pour résoudre le problème identifié dans lhf réponse, vous pouvez mettre votre table de chargement et la sauvegarde des fonctions dans une table qui est retourné par
data.game_model
, comme ceci:Note également qu'une commune erreur serait de déclarer les fonctions que
model:saveTable( t, fn )
au lieu demodel.saveTable( t, fn )
. Rappelez-vous, le premier est un sucre syntaxique pourmodel.saveTable( model, t, fn )
.Maintenant la variable
game
danslocal game = require( "data.game_model" )
doit être initialisé à une table contenant vos fonctions. Vous pouvez facilement vérifier cela:Produit une sortie comme:
OriginalL'auteur GoojajiGreg
Utilisez le code ci-dessous pour enregistrer/charger. Tous les code vient de github/robmiracle.
Utilisation
OriginalL'auteur ldurniat