修复无法从State:enter()中声明的变量中获取的问题
2020-8-23 18:44:17
收藏:0
阅读:109
评论:1
我正在使用Lua和love 2D基于flappy bird开发游戏。因此,我使用StateMachine.lua来管理状态等,并且有一些状态运行良好。我有一个得分状态,其中我使用params在改变状态时获取数据,它有效,但是在新的状态卸载游戏时,我在enter方法中定义的任何变量都没有定义。而那是我可以访问用于数据的params变量的方法。我评论了所有内容,甚至在enter方法中为测试目的定义了任意数字和渲染方法,它返回nil。 但是,如果在init方法中定义,则会起作用,这是我的代码,没有注释的代码
PlayStateP = Class{__includes = BaseState}
PIPE_SPEED = 60
PIPE_WIDTH = 70
PIPE_HEIGHT = math.random(270,290)
BIRD_WIDTH = 38
BIRD_HEIGHT = 24
vari = math.random(20,90)
function PlayStateP:init()
self.num =213
end
function PlayStateP:enter(params)
self.bird = params.bird
self.pipePairs = params.pipePairs
self.score = params.score
self.timer = params.timer
self.lastY = params.lastY
self.num= 3
end
function PlayStateP:render()
love.graphics.setFont(flappyFont)
love.graphics.print(tostring(self.pipePairs)..tostring(self.num2), 8, 8)
end
--[[
Called when this state is transitioned to from another state.
]]
function PlayStateP:enter()
-- if we're coming from death, restart scrolling
scrolling = true
end
--[[
Called when this state changes to another state.
]]
function PlayStateP:exit()
-- stop scrolling for the death/score screen
scrolling = false
end
在这个例子中,无论何时我运行这个状态,文本都以nilnil的形式出现。如果我在init方法中定义一些变量并在enter中更改值,它仍然不会这样做。 如何解决这个问题并使用通过params传递的数据,并仍然能够在文件中使用该数据。
如果您需要的话,这里是基本状态文件
BaseState = Class{}
function BaseState:init() end
function BaseState:enter() end
function BaseState:exit() end
function BaseState:update(dt) end
function BaseState:render() end
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

LUA没有函数重载的概念。您的
PlayerStateP:enter()的第二个定义如下:function PlayStateP:enter() -- 如果我们从死亡中恢复,则重新开始滚动 scrolling = true end覆盖了接受
params参数的第一个定义。如果您使用参数调用它,它们将被忽略。您需要为这些函数选择不同的名称。