You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:07:07