无剑网 Logo

无剑网

㊣Vio.Lam 的网络进化笔记.

Flash AS3练习:改进的小球运动

发布: 时间: 分类: Flash & ActionScript

继续学习ActionScript 3,仍然是通过Flex Builder写纯代码的Flash文件。

我把一开始做的那个简单的小球下落运动改进了一下,现在支持鼠标抛动方向和力度大小了,并且可以调节小球的重量、弹性(与墙壁产生碰撞后的动能损失)、空气摩擦阻力等。为了计算它跟随鼠标抛动的轨迹,我列了满满一张A4纸的计算公式,越算越晕。后来想了一个办法,终于把这个麻烦问题解决了。就是跟踪鼠标键按下的起点(X0,Y0)和放开的终点(X1,Y1)两个坐标,还有记录它按下的时间(t),以此计算鼠标的拖动速度,显然时间t越短力度就越大,起点和终点的距离越大力度也是越大,根据这三个参数来决定小球获得动能的大小。然后再把小球在X轴和Y轴上的动能分开,分别计算独立的X轴速度和Y轴速度,这样就不用再去计算它的位移和角度了,问题大大地简化了。再加上重力这个因素,一个雏形就出来了。测试了一下,效果还不错。

在算重力的过程中我总算见识到了著名的"浮点运算错误",据说这个浮点问题在C#, Java, ActionScript都存在。这个错误的表现为Number类型的浮点变量,在计算过程中并不是绝对准确的,例如0.2*3原本应该算出0.6,然而有时候结果会是0.6000000000000001,构成这个的原因很复杂,有人提出用 int(num*100)/100 这个语句进行保留两位小树的修正,但我测试了一下,前面int的确能取整,单除以100以后又出现新的浮点错误,真的很无奈。想不到电脑编程也会有靠不住的时候,只能尽量避免浮点运算了。

这个练习依然不是什么高深技术。不过里面一些基础知识都用到了。包、类、事件、函数定义、语法和组件都用上了,算是对ActionScript 3 又有了进一步的了解。至于源代码懒得贴上来了,因为对于显示列表里面的坐标还是写得很乱。有需要的,找个硕思Sothink SWF Decomplier 4.0反编译一下这个SWF文件也能看到源码了。

弹性为1,空气摩擦系数为0的时候,小球不会发生任何动能损失,会一直运动下去。原本重量也是可以为零的,可是因为依靠帧率计算重力加速度,加上落地的时候有些偏差,所以为0的时候计算不太准确,所以最低设为1。 调节一下这几个参数,看看运动所发生的变化,也是一种蛮有趣的自娱自乐。至少表明了,我的高中物理知识还没有完全还给老师,嘿嘿。

收藏到书签:

Valid Code

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

分类标签

Flash AS3练习:改进的小球运动     UUSee网络电视