Dynamic TextField无法显示精确值及Flash测验应用时长计算问题
嘿,我来帮你搞定这两个Flash开发里的问题!
问题1:计算Flash桌面测验应用的耗时
你原来的代码有两个核心问题:一是帧之间的变量作用域问题——第一帧定义的startMinutes和startSeconds是局部变量,最后帧根本访问不到;二是只取当前分钟和秒的逻辑有漏洞——如果用户答题跨了分钟甚至小时,比如从59秒到01秒,计算出来会是负数,完全不准确。
给你调整后的正确实现:
第一帧代码(定义全局时间变量)
// 把startTime设为全局变量,确保最后帧能正常访问 var startTime:Date = new Date();
最后帧代码(计算精确耗时)
var endTime:Date = new Date(); // 用时间戳(毫秒数)计算差值,这是最准确的计时方式 var totalMs:Number = endTime.getTime() - startTime.getTime(); // 转换成更友好的分钟+秒格式: var totalMinutes:Number = Math.floor(totalMs / (1000 * 60)); // 如果需要精确到小数位的秒,用这个写法 var totalSeconds:Number = (totalMs % (1000 * 60)) / 1000; // 要是只需要整数秒,就用 Math.floor((totalMs % (1000*60))/1000) // 把结果显示到文本框(假设你有个叫timeResultTextField的Dynamic TextField) timeResultTextField.text = "完成耗时:" + totalMinutes + "分" + totalSeconds.toFixed(2) + "秒";
这个方法不管用户答题跨了多久,都能得到准确的耗时,同时解决了变量作用域的问题。
问题2:Dynamic TextField无法显示精确值
这个问题常见的原因和解决方法有这几个:
- 数据精度被自动截断:如果要显示小数,直接赋值可能会被取整,比如
textField.text = 3.1415;可能只显示3,这时候用toFixed()指定小数位数就行:textField.text = 3.1415.toFixed(4); - 计算过程丢失精度:避免用整数除法,比如AS里
5/2会得到2,要写成5.0/2才会得到2.5;确保赋值给文本框的变量本身就是精确值 - 文本框设置问题:检查
autoSize属性是否正确,有没有因为宽度不够截断内容;如果用了嵌入字体,要确保嵌入了所有需要的字符,比如小数点、数字
内容的提问来源于stack exchange,提问作者nabster023
相关产品推荐
相关产品推荐

