2017-07-15 80 views
0

我正在運行此代碼,希望能讓我的敵人每隔5秒產卵一次,但我一直在努力「嘗試索引全局」自我「(一個零值)。「這是在我的遊戲文件中,表格來自我的敵人文件。任何幫助表示讚賞。搜索結果lua - 嘗試索引全球「自我」(無值)

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

我不這樣做Lua所以不要期待太多,但你試過'表:插入(自我:敵人,敵人)'?我從[** here **]得到了這個(https://stackoverflow.com/questions/20258484/attempt-to-index-global-self-a-nil-value) – finnrayment

+1

如果'enemies'是全局變量,那麼嘗試'table.insert(敵人,敵人)' –

回答

1

self是有效的內部功能,其中self是明確指定的參數或函數是使用冒號運算符(如在function foo:bar())中所定義,因爲它會在這種情況下,一個隱藏的參數來提供。

在你的情況看來,這兩種情況都沒有得到滿足,並且self被視爲未定義的全局變量。

查看Object-Oriented Programming chapter in Programming in Lua瞭解正確使用的詳細信息和示例。

+0

謝謝,你有任何解決方案或其他方式讓我的敵人不斷產卵嗎? – skitzlord

0

我可以看到一些錯誤。我將解釋一種正確的方法來做到這一點,並且可以將其與您設置的方式進行比較。

在你的敵人文件(我將承擔其稱爲enemy.lua),應該包含幾件事情表:

  1. 的表將包含你的敵人名單( !一定要在文件的最後返回吧)
  2. 創建一個新的敵人的函數

它可能是這個樣子:

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 

然後,將其導入到main.lua這一行:

local enemies = require "enemies" 

這將使enemies.listenemies.new提供您的main.lua內。你table.insert就變成

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

基本上,你的主要錯誤是試圖訪問另一個文件裏面的東西,而無需使用require。希望這可以幫助。

相關問題