在corona中重新加载屏幕
我正在使用 corona 开发一个应用程序,在这个过程中我需要不断地重新加载同一个屏幕。我不知道该如何实现,请有经验的人提供示例代码来帮助我。
原文链接 https://stackoverflow.com/questions/7962749
Storyboard API
自从 2011.678
版本开始提供。
以下是一个示例,使用 2011.704
版本的 Storyboard API
。
每次触摸都会重新加载整个场景。
--main.lua
module(...,package.seeall)
local storyboard=require("storyboard")
local scene=storyboard.newScene()
scene.name="scnMenu"
function scene:createScene(event)
local group=self.view
bg=display.newRect(0,0,100,100)
group:insert(bg)
end
function scene:enterScene(event)
Runtime:addEventListener("touch",onTouch)
end
function onTouch(event)
storyboard.gotoScene("main","fade",1000)
end
function scene:exitScene(event)
Runtime:removeEventListener("touch",onTouch)
end
function scene:destroyScene(event)
end
scene:addEventListener("createScene",scene)
scene:addEventListener("enterScene",scene)
scene:addEventListener("exitScene",scene)
scene:addEventListener("destroyScene",scene)
return scene
我不确定,但我的游戏使用相同的 lua 文件来更改场景。
myscene.lua
director:changeScene("myscene")
我尝试了另一种方法,对我有效,示例如下 -
步骤1 - 创建一个对象,例如 - local reloadScene
步骤2 - 当需要重新加载场景时应用步骤2 - reloadScene =“YES” storyboard.reloadScene(“eventsButtonClicked”)
步骤3 - 当不需要重新加载场景时应用步骤3 - function scene2a:exitScene( event ) if reloadScene ==“YES” then storyboard.purgeScene(“eventsButtonClicked”) reloadScene =“NO” end end scene2a:addEventListener(“exitScene”,scene2a)
我认为你应该按照下面的步骤来重载/重新启动 storyboard 场景在 Corona 中。
步骤 1:创建一个函数或者一行代码,从你想要重新加载或重新启动的 storyboard 类重新加载/重新启动相同的场景。
function forRestart(event)
if(event.phase == "ended") then
local current_scene_name = storyboard.getCurrentSceneName()
**storyboard.gotoScene( "reload", "fade", 250 )**
return true;
end
步骤 2:创建一个名为 reload 的 lua 文件。下面是 reload.lua 文件的模板。
local storyboard = require( "storyboard" )
local scene = storyboard.newScene()
-- 当场景的视图不存在时调用:
function scene:createScene( event )
local group = self.view
end
-- 场景移动上屏后立即调用:
function scene:enterScene( event )
local group = self.view
-- 清除关卡
local previous_scene_name = storyboard.getPrevious()
print("previous",previous_scene_name)
-- storyboard.removeScene(previous_scene_name)
storyboard.purgeScene( previous_scene_name )
-- 从头开始加载关卡
storyboard.gotoScene( previous_scene_name, "fade", 250 )
end
-- 场景即将移动离屏时调用:
function scene:exitScene( event )
local group = self.view
end
-- 如果场景视图被删除,则在场景卸载之前将会调用 scene:destroyScene()
function scene:destroyScene( event )
local group = self.view
end
-- 如果场景的视图不存在,"createScene" 事件将会被分发
scene:addEventListener( "createScene", scene )
-- 当场景过渡完成时,"enterScene" 事件被分发
scene:addEventListener( "enterScene", scene )
-- 除了下一个场景过渡开始之前,"exitScene" 事件也会被分发
scene:addEventListener( "exitScene", scene )
-- 在视图被卸载之前,在内存不足的情况下自动卸载,或者通过调用 storyboard.purgeScene() 或 storyboard.removeScene() 显式卸载时,"destroyScene" 事件也会被分发。
scene:addEventListener( "destroyScene", scene )
return scene
你也可以使用以下方法重新加载相同的屏幕:
timer.performWithDelay(500, function()
director:changeScene("your scene name")
end);
但在调用上述函数之前,您需要从显示组中删除所有对象。
你可以创建一个重新加载场景的代码, 并且通过调用它来重新加载任何场景。 就像这样:
composer.gotoScene("Scene.Reload",
{
params =
{
reloadSceneOptions =
{
effect = "slideLeft",
time = 500,
},
reloadSceneName = SceneName
}
})
而你的重新加载场景代码应该像这样:
elseif phase == "did" then
local reloadSceneOptions = event.params.reloadSceneOptions
local reloadSceneName = event.params.reloadSceneName
composer.removeScene(reloadSceneName)
composer.gotoScene(reloadSceneName, reloadSceneOptions)
end
- 如何在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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
2) main.lua
display.setStatusBar (display.HiddenStatusBar) --> 隐藏状态栏 local director = require ("director") --> 导入导演类 local mainGroup = display.newGroup() --> 创建主组 local function main() --> 添加主函数 mainGroup:insert(director.directorView) --> 添加导演类的组 director:changeScene("myscene") --> 切换场景,无特效 return true end main()
3) myscene.lua
module(..., package.seeall) function new() local localGroup = display.newGroup() local redbutton = display.newImage ("redbutton.png") redbutton.x = 160 redbutton.y = 100 localGroup:insert(redbutton) local function pressRed (event) if event.phase == "ended" then director:changeScene ("reloader") end end redbutton:addEventListener ("touch", pressRed) return localGroup end
4) reloader.lua
module(..., package.seeall) function new() local localGroup = display.newGroup() local function listener( event ) director:changeScene ("myscene", "fade") end timer.performWithDelay(50, listener ) return localGroup end