我正在運行此代碼,希望能讓我的敵人每隔5秒產卵一次,但我一直在努力「嘗試索引全局」自我「(一個零值)。「這是在我的遊戲文件中,表格來自我的敵人文件。任何幫助表示讚賞。搜索結果lua - 嘗試索引全球「自我」(無值)
timer = timer + dt
if timer >= 5 then
table.insert(self.enemies, enemy)
timer = timer - 5
end
我正在運行此代碼,希望能讓我的敵人每隔5秒產卵一次,但我一直在努力「嘗試索引全局」自我「(一個零值)。「這是在我的遊戲文件中,表格來自我的敵人文件。任何幫助表示讚賞。搜索結果lua - 嘗試索引全球「自我」(無值)
timer = timer + dt
if timer >= 5 then
table.insert(self.enemies, enemy)
timer = timer - 5
end
self
是有效的內部功能,其中self
是明確指定的參數或函數是使用冒號運算符(如在function foo:bar()
)中所定義,因爲它會在這種情況下,一個隱藏的參數來提供。
在你的情況看來,這兩種情況都沒有得到滿足,並且self
被視爲未定義的全局變量。
查看Object-Oriented Programming chapter in Programming in Lua瞭解正確使用的詳細信息和示例。
謝謝,你有任何解決方案或其他方式讓我的敵人不斷產卵嗎? – skitzlord
我可以看到一些錯誤。我將解釋一種正確的方法來做到這一點,並且可以將其與您設置的方式進行比較。
在你的敵人文件(我將承擔其稱爲enemy.lua),應該包含幾件事情表:
它可能是這個樣子:
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.list
和enemies.new
提供您的main.lua內。你table.insert就變成
table.insert(enemies.list, enemies.new())
基本上,你的主要錯誤是試圖訪問另一個文件裏面的東西,而無需使用require
。希望這可以幫助。
我不這樣做Lua所以不要期待太多,但你試過'表:插入(自我:敵人,敵人)'?我從[** here **]得到了這個(https://stackoverflow.com/questions/20258484/attempt-to-index-global-self-a-nil-value) – finnrayment
如果'enemies'是全局變量,那麼嘗試'table.insert(敵人,敵人)' –