【问题标题】:How to define a variable in Lua and how to call it in other Lua script in Cocos2d-xCocos2d-x中如何在Lua中定义一个变量以及如何在其他Lua脚本中调用
【发布时间】:2014-08-26 08:16:12
【问题描述】:

如何在Lua中定义一个变量(常量),在Cocos2d-x的其他Lua脚本中如何调用?

以我的方式: main.lua

 local r = require("src/Square")
 local constant= r:getConstant()

Square.lua

function Square:getConstant()
    return 10
end

还有其他更优雅的方式吗?任何建议将不胜感激。

【问题讨论】:

  • Lua 不知道常量(const 变量)。 “如何调用(常量)”不清楚,你的意思是如何访问变量?除非变量被声明为“本地”,否则它将可以从任何脚本访问。函数也是如此。假设两个 Lua 脚本在同一个 Lua 堆栈上运行。
  • @LearnCocos2D 我已经编辑了我的帖子,感谢您的热情。

标签: lua cocos2d-x


【解决方案1】:

您可以将其设为全局变量:

constant = r:getConstant()

但变量不会是常数。 Lua 不知道不可变/只读/常量变量的概念。

有一些技巧可以使用 Lua 表的元表来防止值发生变化,尽管这要求值在表中,并且您不能阻止表被更改(即设置为 nil 或其元表被替换)。

简单地使用返回常量值的函数是确保值的常量性的更简单方法。

我过去也做过的是使用标记常量值的符号,例如:

_constant = 10
local _localConstant = 11

_ 前缀将变量表示为常量。或者,如果这些是 C/C++ 或众所周知的框架(即 DBL_EPSILON 或 M_PI_2)中的已知常量,则类似于 #define 宏的 ALL-CAPS 样式类似物可以很好地工作。这只是对程序员的提醒。

最后,“const”表是一个全局表,定义了一些假定的常量值:

const = {thisIsTen = 10, thatIsEleven = 11}

使用表格可以清楚地表明这些是常量:

result = 100 * const.thisIsTen

【讨论】:

    【解决方案2】:

    如果您正在寻找只读且无法更改的 const(constant) 值,则需要为其创建一个函数(您已经拥有该函数)。您还必须知道,lua 通过值而不是通过引用获取基本类型(数字、布尔值、nil、字符串)的返回(仅当您通过创建返回它们时)。

    这里是你的函数的替换:

    square.lua

    Square = {}
    Square.__index = Square
    
    
    local _const = 10
    
    function Square:GetConst()
        local const = _const
        return const
    end
    
    -- Test function
    function Square:MoveUp()
        _const = _const + 2
    end
    
    return Square
    

    main.lua

    local sr = Require("src/Square")
    
    print(sr:GetConst()) -- 10
    
    local plus = sr:GetConst() + 4
    
    print(sr:GetConst(), plus) -- 10     14
    
    sr:MoveUp()
    
    print(sr:GetConst()) -- 12
    

    还要注意Square可以改成局部函数(推荐),这样下次创建对象就不会有问题了。

    【讨论】:

      猜你喜欢
      • 2014-03-10
      • 2020-01-28
      • 2019-06-02
      • 2013-09-25
      • 2011-10-06
      • 1970-01-01
      • 2015-02-19
      • 2023-03-05
      • 2019-01-31
      相关资源
      最近更新 更多