【问题标题】:How to access a variable declared in a module?如何访问模块中声明的变量?
【发布时间】:2015-03-31 18:50:11
【问题描述】:

在我的 game.lua 文件中,我有:

local sprites = require("sprites.lua")

sprites.lua 包含

local iceberg = display.newImage("iceberg.png")
iceberg.x = _W/2
iceberg.y = _H/2
iceberg.alpha = 1

现在,我想将“game.lua”中的“iceberg.alpha”设置为 0,但如果我尝试,Corona 会返回“尝试索引全局冰山(一个 nil 值)”

当然,sprites.lua 包含

module(..., package.seeall)

我做错了什么?

我什至尝试过使用 sprites.iceberg.alpha = 0,但显然它不起作用。

【问题讨论】:

  • 我们需要更多来自 sprites.lua 的代码,尤其是在 return 语句周围

标签: ios module lua coronasdk


【解决方案1】:

不要使用module。只需在 sprites.lua 中返回 iceberg 值或您想要访问的任何其他值:

-- sprites.lua
local iceberg = display.newImage("iceberg.png")
iceberg.x = _W/2
iceberg.y = _H/2
iceberg.alpha = 1
return iceberg

-- game.lua
local iceberg = require("sprites.lua")
-- iceberg.alpha is available here

Lua modules 教程有一些关于其工作原理的额外信息和更多参考资料。

【讨论】:

  • 谢谢保罗,但它仍然不起作用,在我的“game.lua”中我有本地函数 startNewGame(event) if(event.phase=="ended")then iceberg.alpha = 1 end end startBTN:addEventListener("touch", startNewGame)
  • 在调试器的“if”语句中检查 iceberg.alpha 的值,或者发布一个完整的示例。我看不出它有什么不起作用的原因。
  • 嘿抱歉我可能犯了一些错误,因为知道它工作得很好。谢谢! :)
【解决方案2】:

确保您的变量不是本地变量。看看这个例子,它工作得很好。

如果你使用,请在下面的代码中说

local star = display.newLine( 200, 90, 227, 165 )

在 test.lua 然后你会得到错误信息。

这是“main.lua”。尝试更改 alpha 值。

require "test"
star.alpha=0.5

这是“test.lua”。

star = display.newLine( 200, 90, 227, 165 )
star.anchorX = 0.2257
star.anchorY = 0.5

star.x = display.contentCenterX 
star.y = display.contentCenterY
local function rotate(x)
 timer.performWithDelay(1, function() star.rotation = star.rotation + 5;end, 15)
end
rotate()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多