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

基于Corona SDK Lua偏好设置实现游戏高分功能遇阻求助

解决Lua偏好设置实现高分功能的问题

嘿,我看了你用Lua的preferences实现高分功能的代码,发现几个可能导致问题的点,咱们一步步来修正:

首先先把你的代码格式化一下,方便排查:

local highscore_letta = system.getPreference( "app", "highscore", "number" ) 
-- 若偏好不存在则创建并设为0(首次游戏)
if (highscore_letta == nil) then 
    local appPreferences = { highscore = "0" } 
    system.setPreferences( "app", appPreferences ) 
end 
-- 若当前得分高于现有高分...

核心问题分析

  • 类型不匹配:你用"number"类型获取高分,但初始化时存的是字符串"0",这会导致后续得分比较时出现逻辑错误(比如数字和字符串的比较结果不符合预期)。
  • 冗余的nil判断:根据Corona的system.getPreferenceAPI,当指定类型为"number"时,如果偏好不存在,会默认返回0,所以你原本的nil判断其实没必要,但如果要兼容之前可能存过字符串的旧数据,咱们可以做个类型校验。

修正后的完整代码

-- 获取高分,指定number类型,不存在则默认返回0
local highscore_letta = system.getPreference( "app", "highscore", "number" )

-- 兼容旧数据:确保高分是数字类型,避免之前存字符串导致的问题
if type(highscore_letta) ~= "number" then
    highscore_letta = 0
    system.setPreferences( "app", { highscore = highscore_letta } )
end

-- 替换成你实际的当前得分逻辑
local currentScore = 150 

-- 如果当前得分超过现有高分,更新并保存
if currentScore > highscore_letta then
    highscore_letta = currentScore
    system.setPreferences( "app", { highscore = highscore_letta } )
    print("新纪录诞生!高分已更新为: " .. highscore_letta)
end

额外小提示

  • 每次更新高分后一定要调用system.setPreferences保存,不然重启游戏后数据会丢失。
  • 可以在游戏启动时就把高分存到全局变量里,后续更新时直接修改这个变量再保存,减少重复调用getPreference的次数,提升效率。

内容的提问来源于stack exchange,提问作者xflea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:29:44