我有一个Lua函数,可以在其中构建值表并尝试使用命名键将其添加到全局表中。
键名从函数参数中提取。基本上,这是一个文件名,我正在将它与有关文件的数据配对。
不幸的是,全局表总是返回nil。这是我的代码:(让我知道是否需要查看更多信息)
(注释部分是其他尝试,尽管许多尝试已被删除)
Animator = Class{}
function Animator:init(atlasfile, stringatlasfriendlyname, totalanimationstates, numberofframesperstate, booleanstatictilesize)
-- Define the Animator's operation mode. Either static tile size or variable.
if booleanstatictilesize ~= false then
self.isTileSizeStatic = true
else
self.isTileSizeStatic = false
end
-- Define the total animation states (walking left, walking right, up down, etc.)
-- And then the total frames per state.
self.numAnimationStates = totalanimationstates or 1
self.numAnimationFrames = numberofframesperstate or 2
-- Assign the actual atlas file and give it a programmer-friendly name.
self.atlasname = stringatlasfriendlyname or removeFileExtension(atlasfile, 'animation')
generateAnimationQuads(atlasfile, self.atlasname, self.numAnimationStates, self.numAnimationFrames)
end
function generateAnimationQuads(atlasfile, atlasfriendlyname, states, frames)
spriteWidthDivider = atlasfile:getWidth() / frames
spriteHeightDivider = atlasfile:getHeight() / states
animationQuadArray = generateQuads(atlasfile, spriteWidthDivider, spriteHeightDivider)
animationSetValues = {atlasarray = animationQuadArray, width = spriteWidthDivider, height = spriteHeightDivider}
--gAnimationSets[#gAnimationSets+1] = atlasfriendlyname
gAnimationSets[atlasfriendlyname] = animationSetValues
--table.insert(gAnimationSets, atlasfriendlyname)
end
注意:使用print(atlasfriendlyname)和print(animationSetValues)时,都不为空或为零。它们都包含值。
由于某些原因,将密钥对分配给gAnimationSets的行不起作用。
gAnimationSets是在main.lua中的程序顶部一次使用
定义的gAnimationSets = {}
在称为Bug的字符类的init()函数期间调用了Animator类。 Bug类在StartState的init()函数中初始化,该函数从BaseState扩展而来,BaseState仅定义了伪init(),enter(),update()等函数。
使用StateMachine类在main.lua中调用StartState,并将其作为在main.lua中声明的全局表的值传递到StateMachine中。
gAnimationSets在状态表之后和调用状态之前声明。
这是使用Love2D引擎。
对不起,我是来这里寻求帮助的,我已经选择了几个小时。
编辑:更多测试。
尝试在索引gTextures ['buganimation']上打印animationQuadArray总是返回nil。嗯?
Main.lua中的gTextures
gTextures = {
['background'] = love.graphics.newImage('graphics/background.png'),
['main'] = love.graphics.newImage('graphics/breakout.png'),
['arrows'] = love.graphics.newImage('graphics/arrows.png'),
['hearts'] = love.graphics.newImage('graphics/hearts.png'),
['particle'] = love.graphics.newImage('graphics/particle.png'),
['buganimation'] = love.graphics.newImage('graphics/buganimation.png')
}
尝试返回gTextures ['buganimation']会正常返回文件值。它不是空的。
我的大脑现在如此炸裂,我什至不记得为什么来编辑它。我不记得了
Main.lua中的全局表,所有其他功能都无法访问它。
print(gTextures ['buganimation'])在所讨论的函数中起作用。因此,gTextures是绝对可访问的。
表不为空。 AnimationSetValues不为空。
答案 0 :(得分:0)
我要添加第二个答案,因为两者在上下文中都是正确的。
我最终将IDE切换为VS Code,现在原来的一个可以了。
我最初使用的是带有Love2D解释器的Eclipse LDT,在那种环境下,我的原始答案是正确的,但是在VS Code中,原始的答案也是正确的。
所以Dimitry是正确的,它们是等效的,但是关于我实际的Eclipse安装的某些规定不允许该语法起作用。
在解释器遇到另一个奇怪的语法问题后,我切换到VS Code,该语法问题无法识别goto语法并给出了持续的错误。解释器认为goto是变量的名称。
所以我切换了,现在两者都已修复。我想我暂时不会使用LDT。
答案 1 :(得分:-2)
解决方案:Lua语法。脑油炸综合征
我写道:
animationSetValues = {atlasarray = animationQuadArray, width = spriteWidthDivider, height = spriteHeightDivider}
应该是:
animationSetValues = {['atlasfile']=atlasfile, ['atlasarray']=animationQuadArray, ['width']=spriteWidthDivider, ['height']=spriteHeightDivider}
编辑:我完全知道如何使用答案。这是在此处发布的,以保留我的位置以供解答,以便稍后我返回家乡时可以对其进行编辑,这正是我现在正在做的事情。我将保留旧职位以供存档。
原件: 我解决了很抱歉没有立即发布解决方案。我的大脑融化成肉汁。
我明天发布。只是想“回答”说不需要帮助。解决了。
解决方案基本上是:“哦,这只是Lua的事情之一”。精彩。我对这种语言很感兴趣-您可以用我的空白表情来分辨。
从无行尾或方括号的语言开始,但使用强制打印括号...嗯。完成此类后,我将返回C#。