| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
新手速建海量软件
物理知识在FLASH世
浅谈应用按钮事件
浅谈AS的绘图功能
浅谈AS与物理运动
利用文本框制作简
初级物理模型的构
初级物理模型的构
初级物理模型的构
初级物理模型的构

初级物理模型的构建(AS)-力学1           

初级物理模型的构建(AS)-力学1

作者:佚名 来源:闪吧 作者: EmilMatthew 更新:2007-1-13 20:47:47 错误报告 我要投稿

实现的初级物理模型的构建(力学-1)  

EmilMatthew(小小梦想) 2004.8.21

阅读本文之前,假定你已有了:

基本的编程能力,初步了解OOP。

高中及以上的程度物理及数学知识。

推荐能力:会基本的AS编程。

序:

由于我打算把这样一个专题长期作下去,所以有些东西必须事先关照一下,以后的文章中就不再讲了。

1为何选用ActionScript?

ActionScript是矢量动画制作软件Flash的动画脚本语言,现在已经发展到了OOP(面象对象编程)层面,与动画对象的结合是极其方便而直接的,完全可以满足我现在所想做的一些动态效果演示的要示。(而我用到的,也只是AS1,由于我的编程能力有限,目前AS2我还不会。)

我这里用的OOP方法,学习的是Robert Peneer那本“Flash MX 编程与创意”所介绍的方法,非常的简单易用:

如在AS脚本中写:

MovieClip.prototype.v=function(x){

This.v=x;

}

便使得MC类扩展了一个速度v的属性,这是非常有用的,也是OOP初级应用中最具有魅力之处(给原有的类添加属性及方法)

在场景的AS里:

只要用 mc.v(5);便创建了其速度属性,注意,一定要先创建,否则在下面使用时,会出现Undefined的错误。

这里其实是用到了一个方法,这个方法就是传送参数,给MC对像的v属性,非常的简单易用。

创建完之后,下面进行数值上的计算时。

用mc.v=…..的形式就可以了。

有人会说了,何必这样呢,我只要根据我的需要,在程序中创建相应的属性不就行了吗?这在问题比较简单时和只作一个独立的效果时当然没问题。而当问题变的复杂时,同时你又需要在这个方面“长期作战”时,构建相应的函数库就显得犹为重要了 。比方说,我构建了自己的物理属性库,可以使一些物理数据表达和处理更为“固化”,更能成为一个体系,使程序更具有移植性,更有利于实现物理现象的动态演示。

比方说,我准备给七个对象分别创建v,m,a(加速度),r(半径)四个物理属性,只消在

AS脚本里写:

MovieClip.prototype.CreateBasicPhysicsFeature=function(m,v,a,r){

this.m(m);

this.v(v);

this.a(a);

this.r(r);

}//假定先前已经写好的构建属性m,v,a,r 的

场景中构造时只消这样就行了:

while(i<8){

eval(“ball”+i).CreatBasicPhysicsFeature(1, 1,1,1);

}

是不是很方便呢?

下面是我目前为实现效查所构建的物理函数库:(扩建中)04/8/19


点击浏览该文件

2计算机的计时方式及误差的调整:

现实世界中的时间连续的,不可被分割的,而在计算机中动态效果的实现是以帧频为单位的,在摸拟时必定会有一定的误差出现。

举个例子,假定有一堵透明的墙(去掉了其硬度的物理属性),规定只要有物体碰到它,该物体就会被返弹回去。在现实世界中,这是必定可以实现的,因为时间是连续的;而到了计算机里,则很可能出现物体飞入墙中,又被弹回的情形,因为时间以帧频是以帧率为单位,是间隔的。前一帧做检测时,物体距墙还有1个单位,而其速度为10单位/帧并朝向墙飞去,则下一帧必定会有球入墙中的不足发生。所以,物理问题简单时,做必要的调整是可行而且是很重要的的,如:自由落体时,在碰底时加一个:

mc._y=buttom+mc._height/2 //未经说明,以后的mc的_x,_y的注册点都是mc的中间。

便是一个很好的误差调整,否则会因为每次误差的不断累积,而出现球穿出地面的BUG。

以下是程序清单:

if (mc.getBounds(_root).yMax>=600) {

mc._y = 600+mc._height/2;;

// Important!否则会因为微小的积累而导致质变---穿出地面。

mc.v *= -0.9;

// 还是有点衰减为好。

}

物理问题复杂时,这种误差的调整就显得很难了。当然,路是人走出来的,只要你的数学水平,物理水平和编程能力都跟上去的话,这些误差是一定可以降到最小限度,只不过,这现在对我,还是个比较高远的目标。

3单位:

速度单位在这里,很显然是“像素/帧”,所以,把动态效果放在每帧更新一次的onEnterFrame事件处理器(也可以用SetInterval)中,写下:v+=a ; _x+=v;是很合理的。

4不符要求的两类动画:

一种是帧频过低的动画,看起来是一格一格的,出现这种情况时,就要考虑是否是由于算法不良造成了运行过缓,还是在图片上消耗了过多的内存,必须进行改进。

第二类是运动过快的动画,如何一个物体在屏幕上的运动速度高达100像素/帧,而你的帧频又在30FPS以上,那么,此时,物体的运动变成的转瞬即逝,看都看不清了,更别谈什么碰撞检测之类的了。

帧频可能的话,当然是希望高些,因为这样的话,无论是动态摸拟还是碰撞检测,都会更精确,一般摸拟器的帧频都是60FPS,这样的帧频要求在FLASH里太高了,不过倒也好,可以更加激励我们脚踏实地的去优化代码,改过算法。

PS:由于WORD里的格式问题,会造成极少部分语句造成不符合AS的语法规则,如else if显示成elseif ,敬请谅解。

好,关照完这些注意事项后,下面进入正题:

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。