小编Dan*_*vas的帖子

Lua的沙箱5.2

我从"编程在Lua"由罗伯托·萨利姆斯学习,我发现,在本书中,沙箱的示例使用功能setfenv()改变给定函数的环境,但在Lua 5.2这一功能不再可用.

我试图将一些文件(配置文件)中的值加载到表中的字段中,但是在lua 5.2中我不能使用setfenv(所以我可以在给定的环境中加载值).在阅读了一些关于lua 5.2的文章之后,我发现每个函数可能有(或没有)一个名为_ENV的upvalue作为环境,因此,我尝试了以下代码:

function sandbox(sb_func, sb_env)
    if not sb_func then return nil, "sandbox function not valid" end
    sb_orig_env = _ENV
    _ENV = sb_env -- yes, replaces the global _ENV
    pcall_res, message = pcall( sb_func )
    local modified_env = _ENV -- gets the environment that was used in the pcall( sb_func )
    _ENV = sb_orig_env
    return true, modified_env
end

function readFile(filename)
    code = loadfile(filename)
    res, table = sandbox(code, {})
    if res then
        --[[ Use table (modified_env) ]]-- …
Run Code Online (Sandbox Code Playgroud)

environment lua file external sandbox

5
推荐指数
1
解决办法
3431
查看次数

如何在窗口上临时防止鼠标监听器?

我正在用Java编写一个游戏,这是我第一个尝试"漂亮"的游戏.这款游戏被称为Bantumi - 它是一款棋盘游戏,现在我正在为动作编写动画.问题在于,当运动动画运行时,棋盘仍然会获得鼠标事件,如果用户选择了新的动作,则将丢弃正在运行的动作.

对于董事会,我正在使用扩展JLayeredPane的类.这是我如何拥有我的图层:

第0层:带有种子的洞,因此用户选择一个用于移动,每个孔是带有MouseListener的JPanel.

第1层:标记当前所选孔的突出显示

第2层:运动的动画.

第10层:我写的一个自定义通知系统类,它说的是"你的转弯","重复转弯","你赢了"等等.

我想在动画运行时阻止任何这些图层中的每个可能的鼠标事件,我该怎么做?我认为在顶级播放器中添加一个覆盖整个区域的面板就足够了,但它没有用.任何解决方法?

java swing mouselistener

2
推荐指数
1
解决办法
3207
查看次数

标签 统计

environment ×1

external ×1

file ×1

java ×1

lua ×1

mouselistener ×1

sandbox ×1

swing ×1