2017-07-15 3 views
0

Je cours ce code dans l'espoir de faire réapparaître mes ennemis constamment toutes les 5 secondes mais je continue à obtenir "Tentative d'indexation '(une valeur nulle). " Ceci est dans mon fichier de jeu et la table est de mon fichier ennemi. Toute aide est appréciée.Résultats de la recherche lua - Tentative d'indexer le 'self' global (une valeur nulle)

timer = timer + dt 
if timer >= 5 then 
table.insert(self.enemies, enemy) 
timer = timer - 5 
end 
+1

Je ne fais pas Lua alors ne vous attendez pas à beaucoup, mais avez-vous essayé 'table: insert (self: ennemis, ennemi)'? Je l'ai obtenu de [** ici **] (https://stackoverflow.com/questions/20258484/attempt-to-index-global-self-a-nil-value) – finnrayment

+1

Si 'ennemis' est une variable globale, alors essayez 'table.insert (ennemis, ennemis)' –

Répondre

1

self fonctions à l'intérieur est valide lorsque self est un paramètre spécifié de manière explicite ou une fonction est définie en utilisant l'opérateur du côlon (comme dans function foo:bar()), telle qu'elle sera fournie en tant que paramètre caché dans ce cas.

Il semble que dans votre cas, aucun de ces deux cas ne soit satisfait et self est considéré comme une variable globale indéfinie. Voir Object-Oriented Programming chapter in Programming in Lua pour plus de détails et des exemples d'utilisation appropriée.

+0

Merci, avez-vous une solution ou un autre moyen de faire apparaître mes ennemis constamment? – skitzlord

0

Il y a quelques petites choses que je peux voir. Je vais vous expliquer une façon correcte de le faire, et vous pouvez le comparer à la façon dont vous l'avez mis en place.

Dans votre fichier ennemi (je vais supposer que son appelé enemy.lua), il devrait y avoir une table qui contient deux choses:

  1. Une table qui contiendra votre liste d'ennemis (! assurez-vous de le retourner à la fin du fichier)
  2. une fonction qui crée un nouvel ennemi

il pourrait ressembler à ceci:

local enemies = { } -- table to export 

enemies.list = { }  -- list of entities 

function enemies.new() 
    local new_entity = { } 

    new_entity.x = 0  -- set entity coordinates 
    new_entity.y = 0   

    -- set any another entity information, like sprites, health, etc. 

    return new_entity 
end 

return enemies   -- make this table available to other files through require 

Ensuite, vous importez dans main.lua avec cette ligne:

local enemies = require "enemies" 

Cela fera enemies.list et enemies.new disponible à l'intérieur de votre main.lua. Votre table.insert devient alors

table.insert(enemies.list, enemies.new()) 

Fondamentalement, votre erreur principale essayait d'accéder à quelque chose dans un autre fichier sans utiliser require. J'espère que cela t'aides.