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

求助:ActionScript 2中按钮点击时else/if语句无法执行的问题

ActionScript 2按钮切换位置失效的原因及解决方法

你的代码失效的核心问题是浮点数精度误差:Flash中影片剪辑/按钮的_x、_y属性是浮点型数值,但直接用==做精确相等判断时,会因为渲染计算产生的微小精度偏差导致判断失效。

举个例子:第一次点击后,numb._x的实际值可能不是精确的677.0,而是677.0000001或676.9999999这类接近但不等于目标值的数,这时候else if的判断条件就永远不成立,自然无法触发返回原位置的逻辑。

解决方案

方案1:使用范围判断代替精确相等

通过判断坐标与目标值的差值是否在极小范围内(比如0.01),忽略微小的精度误差:

on(press) {     
    // 允许0.01的误差范围,判断是否在初始位置
    if (Math.abs(numb._x - 150.1) < 0.01) { 
        numb._x = 677.0;
        numb._y = 271.1;
        trace(numb._x);
        trace(numb._y);
    }
    // 判断是否在目标位置
    else if (Math.abs(numb._x - 677.0) < 0.01) { 
        numb._x = 150.1;
        numb._y = 542.1;
    }
}

方案2:用布尔标记记录状态(推荐)

完全避开浮点数比较,用一个布尔变量记录按钮当前的位置状态,点击时切换状态并执行对应逻辑:

  1. 先在主时间轴的第一帧添加变量定义:
var isNumbMoved:Boolean = false;
  1. 修改按钮上的代码:
on(press) {     
    if (!isNumbMoved) { 
        numb._x = 677.0;
        numb._y = 271.1;
        trace(numb._x);
        trace(numb._y);
        isNumbMoved = true; // 标记为已移动
    }
    else { 
        numb._x = 150.1;
        numb._y = 542.1;
        isNumbMoved = false; // 标记为未移动
    }
}

方案3:使用整数坐标(如果允许)

如果设计上可以接受,把所有坐标改成整数(比如150、677),这样浮点精度问题就不会出现,直接用==判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:43:35