如何修复Solar2D中gotoScene跳转问题?自制Sonic游戏场景跳转报错
自制Sonic游戏场景跳转报错问题
我正在制作一款自制Sonic游戏,已完成作为菜单的main.lua,希望通过点击按钮实现从main.lua到level1.lua的场景跳转,编写对应代码后出现报错。
相关代码
main.lua
-- MAIN MENU (LEVEL SELECT) local composer = require("composer") local buttonGroup = display.newGroup() local startY = -30 -- 初始垂直位置 local spacing = 40 -- 按钮间距 local button1 = display.newRoundedRect(display.contentCenterX, startY + 0 * spacing, 250, 30, 10) button1:setFillColor(0.8, 0.2, 0.2) -- 红色 local label1 = display.newText({ text = "关卡1", x = button1.x, y = button1.y, font = "Verdana", fontSize = 20 }) local function goToLevel1() print("跳转到关卡1") composer.removeScene("menu") composer.gotoScene("level1") end button1:addEventListener("tap", goToLevel1) buttonGroup:insert(button1) buttonGroup:insert(label1)
level1.lua
local composer = require("composer") local scene = composer.newScene() function scene:create(event) local sceneGroup = self.view local text = display.newText({ text = "这是关卡1!", x = display.contentCenterX, y = display.contentCenterY, fontSize = 30 }) sceneGroup:insert(text) end scene:addEventListener("create", scene) return scene
报错信息
ERROR: composer: gotoScene() - scene 'level1' does not exist or could not be loaded. Make sure the scene file exists and is named correctly.
问题分析与解决方案
- 文件校验:确认
level1.lua与main.lua处于同一目录,文件名完全匹配(大小写敏感,不能写成Level1.lua或level1.LUA)。 - 修正Composer场景注册逻辑:原
main.lua未被Composer注册为场景,直接调用composer.removeScene("menu")会出错,且无法被Composer正确管理。修改main.lua结构:local composer = require("composer") -- 将当前文件注册为"menu"场景 local scene = composer.newScene() function scene:create(event) local sceneGroup = self.view -- 所有UI创建代码移入此函数 local buttonGroup = display.newGroup() sceneGroup:insert(buttonGroup) local startY = -30 -- 初始垂直位置 local spacing = 40 -- 按钮间距 local button1 = display.newRoundedRect(display.contentCenterX, startY + 0 * spacing, 250, 30, 10) button1:setFillColor(0.8, 0.2, 0.2) -- 红色 local label1 = display.newText({ text = "关卡1", x = button1.x, y = button1.y, font = "Verdana", fontSize = 20 }) local function goToLevel1() print("跳转到关卡1") composer.gotoScene("level1") end button1:addEventListener("tap", goToLevel1) buttonGroup:insert(button1) buttonGroup:insert(label1) end scene:addEventListener("create", scene) -- 启动当前场景 composer.gotoScene("menu") return scene - 移除不必要操作:无需手动调用
composer.removeScene("menu"),Composer会自动处理场景的加载与卸载,手动移除易引发错误。
内容的提问来源于stack exchange,提问作者Infinite Mapping
相关产品推荐
相关产品推荐

