You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

计数器逻辑异常:拍照按钮需多触发一次才会禁用

问题分析与修复方案

看起来你遇到的是逻辑顺序导致的小bug——当前代码要等到第7次点击拍照按钮才会触发完成状态,因为完成逻辑是在下一次调用CapturePhoto才会执行,而不是在达到目标步数的那次点击后立即触发。

问题根源

假设总步数driftNumSteps = 6,初始CurrentStep = 0

  1. 第1-6次点击时,CurrentStep从0递增到6,每次都满足CurrentStep <= 6-1(也就是<=5)的条件,所以只会执行拍照逻辑,不会进入else分支。
  2. 第7次点击时,CurrentStep = 6,不满足<=5,才会进入else分支触发完成状态。

修复后的代码

我们调整逻辑,在每次拍照后递增步数,然后立即检查是否达到目标步数,达到的话直接触发完成逻辑,不需要等下一次点击:

public void CapturePhoto(float latitude, float longitude) {
    // 先判断是否已经完成,避免重复执行无效操作
    if (GameManager.CurrentStep >= GameManager.instance.driftNumSteps) {
        GameManager.instance.driftInstructionText.text = "Drift Completed!!";
        Debug.Log("Drift is already complete!");
        return;
    }

    // 执行拍照相关的业务逻辑
    // 获取下一个漂移步骤(用CurrentStep+1,因为还未递增步数)
    EventManager.GetDriftStep(GameManager.CurrentStep + 1);
    // 插入照片数据到SQL(替换硬编码经纬度为方法参数)
    GetComponent<SQLiteActions>().InsertPhotoData(GameManager.CurrentDriftID, "texture path", latitude, longitude);
    // 拍照保存逻辑(你的注释代码可以保留)
    /*if (PhoneCamera.backCam != null) {
        Texture2D photo = new Texture2D(PhoneCamera.backCam.width, PhoneCamera.backCam.height);
        photo.SetPixels(PhoneCamera.backCam.GetPixels());
        photo.Apply();
        SavePhotoToCameraRoll(photo);
        Debug.Log("Photo Captured!");
    } else {
        Debug.Log("Phone Camera Not Found!");
    }*/

    // 递增步数
    GameManager.CurrentStep++;

    // 检查是否达到目标步数,立即触发完成状态
    if (GameManager.CurrentStep == GameManager.instance.driftNumSteps) {
        GameManager.instance.driftInstructionText.text = "Drift Completed!!";
        Debug.Log("Drift is complete!!");
        UIActions.EnableButton(GameManager.instance.newDriftBtn);
        UIActions.DisableButton(GameManager.instance.takePhotoBtn);
    }

    Debug.Log(GameManager.CurrentStep + " out of " + GameManager.instance.driftNumSteps + " steps.");
}

关键调整点

  1. 前置判断:先检查是否已经完成,避免重复执行拍照逻辑。
  2. 递增后立即检查完成:每次拍照完成后递增步数,直接判断是否达到目标,达到就立即触发完成状态(禁用按钮、提示文本),不需要等下一次点击。
  3. 修正参数传递:把硬编码的经纬度换成方法参数latitudelongitude,更符合业务逻辑。

这样修改后,当CurrentStep从5递增到6(刚好达到总步数6)时,就会在第6次点击拍照按钮后立即触发完成状态,不会多等一次点击。

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

火山引擎 最新活动