Swift点击器游戏购买系统负数异常求助:输入框逻辑问题
解决点击器游戏中资源负数增长的问题
嘿,我一眼就瞅出你代码里的几个关键问题,正是它们导致资源变成负数甚至无限负增长。咱们一步步来修复:
1. 最致命的笔误:判断条件和扣除数值不匹配
你代码里写的判断是tidePods >= ppcOrder*5,但实际扣除的却是ppcOrder*50——这就意味着,只要你的tidePods大于等于ppcOrder*5,就会执行扣除50*ppcOrder的操作,资源直接就不够了,自然变成负数。把判断里的5改成50就能解决这个核心问题!
2. 强制解包的风险:输入无效直接崩溃
Int(podsPerClickOrder.text!)!这里连续两个强制解包,要是用户输入的是空字符串、字母或者其他非数字内容,你的App直接就崩了。而且如果用户输入负数,ppcOrder会变成负数,这时候tidePods -= ppcOrder*50相当于增加资源,逻辑完全混乱。
3. 修复后的完整代码
我把所有问题都修正了,还加了安全校验和用户友好的处理:
var intNumber : Int = 0 @IBOutlet weak var podsPerClickOrder: UITextField! @IBOutlet weak var tidePodScore: UILabel! var tidePods: Int = 0 // 假设你已经初始化了这个资源变量 var podsPerClick: Int = 0 @IBAction func orderButton(_ sender: Any) { // 安全解析输入:确保输入是正整数,避免崩溃和恶意输入 guard let inputText = podsPerClickOrder.text, let ppcOrder = Int(inputText), ppcOrder > 0 else { // 输入无效,清空输入框并退出 podsPerClickOrder.text = "" print("请输入有效的正整数!") return } // 清空输入框 podsPerClickOrder.text = "" // 计算总花费,判断资源是否足够 let totalCost = ppcOrder * 50 if tidePods >= totalCost { tidePods -= totalCost podsPerClick += ppcOrder // 更新UI显示最新数值 tidePodScore.text = "\(tidePods)" // 如果你有显示podsPerClick的Label,记得也更新它 // podsPerClickLabel.text = "\(podsPerClick)" } else { // 资源不足时的提示(可选,也可以用弹窗提示用户) print("资源不够买这么多单位哦!") } }
关键修复点说明
- 安全输入校验:用
guard语句确保输入是有效的正整数,既避免崩溃,又防止用户输入负数搞乱逻辑 - 修正花费判断:总花费和判断条件统一用
ppcOrder*50,确保只有资源足够时才执行购买 - 用户反馈:增加了输入无效和资源不足的提示,提升用户体验
内容的提问来源于stack exchange,提问作者Jon Bergeron
相关产品推荐
相关产品推荐

