LUA尝试索引全局零值
2019-5-6 8:55:58
收藏:0
阅读:170
评论:1
我已经阅读了其他同名答案,但没有结果。我的问题看起来很简单,但我无法找到处理的方法。几天前刚开始学习LUA。在这里,它打印"nam",因此存在冲突。但是,display.remove(apple)无法正常工作。而removeSelf()会出现错误,“尝试索引全局变量'apple'(值为nil)”。我唯一想发生的事情是在碰撞时使苹果消失。
function appleCollision(self, event)
if event.phase == "began" then
print("nam")
--display.remove( apple )
apple:removeSelf()
apple = nil
end
end
local apple = display.newImageRect( "apple.png", 65, 85 )
apple.x, apple.y = 460, -100
apple.rotation = 15
apple:addEventListener ( "collision", apple )
apple.collision = appleCollision
physics.addBody( apple, { density=1.0, friction=0.3, bounce=0.3 } )
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我想这会是一个多部分的答案...
词法作用域
典型的例子:
do local foo = 20 function bar() return foo end end print(tostring(foo)) -- 输出 "nil",foo 已经失效 print(bar()) -- 输出 20,bar 仍然知道 foo在你的情况下则相反:
function bar() return foo end -- 此时还没有作为 local 的 foo,因此 Lua 尝试访问全局变量 foo do local foo = 20 print(tostring(bar())) -- 输出 nil,因为 bar 不知道 foo end -- 程序忘记了 local foo foo = 30 -- 全局变量 local foo = 20 print(bar()) -- 输出 30,因为它不知道 local foo你的问题
这基本上就是你例子中所发生的情况。你在函数声明之后声明了
player变量,因此在函数声明时,没有局部变量player存在,因此它编译出的函数访问一个全局player变量。由于该全局变量不存在,它被视为空,当您尝试索引它时 Lua 发出警告。解决方法
local,使player成为全局变量(容易实现,但全局变量是魔鬼,不应该轻易使用)local player,然后可以在更下面为其赋值。请注意,该函数将保存变量,而不是其值。在下面的例子中说明了我所说的内容:
local foo = 20 function bar() return foo end foo = 30 print(bar()) -- 输出 30,而不是 20还有更多要考虑的问题,但这是解决您问题所需了解的全部内容。如果您想学习更多,请在 Google 中搜索 Lua 的词法作用域,您肯定会找到比我更好的解释。