当前位置: 首页 > news >正文

AS2中Tween类的delete与stop

昨天的计划中今天去实现项目中的播放列表单独与控制条自动隐藏,但又不想采用原来控制条的隐藏方式(原来是在隐藏的时候直接将visible设置为false),想做个渐变隐藏。于是就刷刷地加上N行代码。简单地说就是在播放列表的onMouseMove处理事件检测到鼠标在它的外边时就启动一个timer(时间间隔自己设置),当timer时间到了就新建一个Tween使播放列表渐渐隐藏。当检测到鼠标移动到播放列表的范围时就停止渐隐并将播放列表设置为完全显示(_vi)。

    鼠标在外面静止一定的时间后播放列表隐藏,完全隐藏后鼠标移动到播放列表范围,播放列表又自动显示,很好,但是当播放正在隐藏中,也就是说Tween正在执行时我鼠标移动到播放列表范围时播放列表却出现闪烁几次后消失。然后我就花费了大概一个小时检测我写的代码逻辑,发现少了两个逻辑:第一鼠标移到播放列表范围时应该使Tween无效。第二当开始渐隐时不能新增新的Tween(说起来简单,但是As2的调试我都不想提了,太难了,你可以想一想在C++程序里只使用MessageBox来调试)。

   问题二好解决,添加一个标志变量即可,问题一看起来也好解决,查看一下其它部分的代码,发现以前负责这个项目的经理使用了a = new Tween(……); delete  a;这样的代码,那也我也照着用,但是问题又来了,现在闪烁的问题更严重了。费了老大功夫在代码里加了N个trace语句,发现即使delete掉了tween结果改变alpha值的函数还在跑。 我郁闷,又检查了所加代码的逻辑并且查看了相关代码的逻辑,还是没有发现问题,研究了数小时无结果,火大,打开MSN就想向经理求救。但是问题都敲好了,还是没有发出去。冷静下来想想,先另建个小程序,里面放个二个按钮和一个剪辑,按钮用来开始和停止那个剪辑渐隐。代码如下:

import mx.transitions.Tween import mx.transitions.easing.Strong; import mx.utils.Delegate; var _imageHideTween:Tween = undefined; //图像隐藏时使用的动画对象 start_btn.onPress = Delegate.create(this, OnStartHide); stop_btn.onPress = Delegate.create(this, OnStopHide); function OnStartHide(){ trace("Start"); _imageHideTween = new Tween(test_mc, "_alpha", mx.transitions.easing.Strong.easeOut, 100, 0, 5, true); } function OnStopHide(){ trace("Stop"); //_imageHideTween.stop(); delete _imageHideTween; trace(_imageHideTween); }

 

发现在这里也是不能正常停止渐隐,然后想一想分别查了delete和Tween类的帮助,发现Tween里还有个stop方法用来停止Tween,就将上面代码OnStopHide中注释的那一句添上了,然后,这个实现代码就正常了。然后带着疑问去查看了Tween的源码,发现它的实现模式也是相当简单,也是启动了个定时器,定时调用一个回调函数,并且在回调里调用构造Tween时指定的用来计算新值的函数,然后对调用构造Tween时指定的对象的指定参数进行更改。在Tween类里没有显示析构函数,也就是没有在delete这个Tween时对定时器进行关闭,所以delete 这个Tween后效果依然是继续的,但是这个对象已经析构了为什么里面的回调函数还能正常执行就说不清楚了,谁让As2是个脚本语言呢。

 

   解决了这个问题,下面的就简单了,修改一下播放列表鼠标检测策略和优化一下流程,新的功能就做好了。

 

  但是回想一下,一个简单的函数使我足足浪费了大半天的时间来检查自己的代码,并且是如何也检测不出来问题,道理是如此简单,检查时总会放过那些自认为绝对正确的部分,那么如论如何也是检测不出错误的。似乎有句话是:“最可怕的不是无知,而是你不知道自己无知”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/k1988/archive/2009/05/26/2165728.html

相关文章:

  • Java网络编程从入门到精通(17):Socket类的getter和setter方法(1)
  • 最新Mysql中文帮助
  • Vista Sidebar Gadget (侧边栏小工具)开发教程 (3)
  • C++中方法定义和调用需要注意的一个地方
  • 在局域网里上网时总是弹出宽带连接的窗口
  • ExtJS学习之ComboBox
  • 书签
  • 如何实现以root身份telnet连接rhel服务器?
  • mhdd应用详解-入门篇(图文教程)
  • 菜鸟学Linux之六:samba服务的搭建与部署
  • Netcat
  • 表达式求值组件Jeval
  • “U盘大盗”让你的U盘防不胜防###
  • 我的耳朵
  • [转载]【Java EE】Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架 整合开发
  • Android单元测试 - 几个重要问题
  • express如何解决request entity too large问题
  • github指令
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript实现分页效果
  • js中forEach回调同异步问题
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Lsb图片隐写
  • QQ浏览器x5内核的兼容性问题
  • React组件设计模式(一)
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Webpack 4x 之路 ( 四 )
  • 编写高质量JavaScript代码之并发
  • 电商搜索引擎的架构设计和性能优化
  • - 概述 - 《设计模式(极简c++版)》
  • 工作手记之html2canvas使用概述
  • 技术:超级实用的电脑小技巧
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 收藏好这篇,别再只说“数据劫持”了
  • 详解移动APP与web APP的区别
  • 译米田引理
  • 与 ConTeXt MkIV 官方文档的接驳
  • 智能网联汽车信息安全
  • 阿里云移动端播放器高级功能介绍
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)常见O(n^2)排序算法解析
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三)c52学习之旅-点亮LED灯
  • (四) Graphivz 颜色选择
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • *** 2003
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)