Flash研究

博客同步工具BlogSync

BlogSync是一个在博客之间进行同步复制的工具,它会自动比较两个博客之间的差异,找出不同的文章并列出来,供使用者选择,然后执行复制操作。经BlogSync复制的帖子可以保留原本的排版样式、发帖时间以及标签。你可以用BlogSync方便地维护镜像站点,也可以把它作为一个搬家工具。

目前BlogSync支持Blogger(GDATA API)、MSN Live Spaces、WordPress、Drupal等BSP或网站平台软件。详细的支持名单请看这里

当心"stop()"!

This topic is related to AS2.0 .

最近我发现一个非常奇怪的返回值丢失的问题,情况是这样的:

我有一个类A,它继承自MovieClip,并在构造函数中调用了stop()方法。一切看起来都很正常,但是任何创建A的实例的方法的返回值都会丢失。
代码是这样的:
在A.as文件内:

class A extends MovieClip{
  function A(){
    stop();
  }
}

在test.fla文件内:
创建一个空MC,设置linkage id为"testa",并设置AS2.0 class为"A"。
在时间轴上写下下面的代码:

滚动的球——RigidAPE刚体引擎新进展

自从上一个RigidParticle的demo发布以来,我重新整理了它的架构,并完善了它的算法。现在终于有新东西可以看了。
主要的改进是在这些方面:

  • 把检测碰撞点的代码放到了CollisionDetector中,我觉得这样更加合理一点
  • 关于刚体碰撞的运算,放到了一个新的类RigidCollisionResolver中。碰撞的算法以前只是看起来像得近似算法,现在才能算是真正的“模拟”。
  • RigidParticle被删除了,取而代之的有3个新的类:RigidItem、RigidRectangle和RigidCircle。RigidItem是新架构中所有刚体的母类,它管理所有刚体共有的一些操作和运算。RigidRectangle和原来的RigidParticle功能相同,模拟一个矩形的刚体。RigidCircle则是新增的圆形刚体,它可以模拟圆形粒子所无法做到的滚动效果,一个滚动着的球能够借助它的势能爬上山坡,这一点使用圆形的粒子是无法做到的

不过新的架构也有缺点,目前它还无法和普通粒子发生互动,而摩擦力的计算上还没有完全解决。

支持载入"obj"文件的Flash 3D引擎


这个3D引擎能够从obj文件中载入模型,而许多3D工具软件都能够输出obj格式,所以你可以在其它软件中建模,然后拿到这个引擎中使用。
我的3D汽车运动模拟就是在这个引擎的基础上建立的。

这个引擎最早是一个as1.0写成的开源3D引擎,我把它用2.0重写,然后增加了许多新的功能。这个引擎最大的特点是它是一个以矢量图形为基础的3D引擎。与其他大多数以点阵图形为基础的引擎不同。这个引擎更适合运行在flash 8.0以前的版本上。flash8之后引入了位图运算,所以更适合用点阵图形的引擎来做。

你可以看到这个引擎的隐藏面消除还有很多问题,这是因为大多数隐藏面消除的算法都是针对点阵图形引擎的,所以在这里我只用了一个很简单的方法来做隐藏面消除,于是在很多模型上的表现并不好。但是如果你能够在模型上多华一些功夫来细化,你一样可以得到很完美的结果。作为例子,你可以载入house.obj看看,这是我专门优化过的一个模型,你可以看到他的表现相当好,几乎看不到什么破绽。

3D汽车运动模拟


这是汽车运动模拟试验的3D版本,它们使用相同的刚体运动引擎(这个刚体引擎本身就是3D的,它内部使用三维向量),只是这个用三维的形式来表现。

模拟汽车运动试验

这是我一年多以前做的一个小程序,它能够比较准确地模拟汽车的运动,为了达到这个目的,我专门开发了一个模拟刚体运动的引擎。
这个模拟汽车的运动完全是从力开始计算出来的,加速度、速度、力矩、角速度等等完全是经过计算而得到的。所以它的运动方式几乎和真车一样,看起来相当真实。加速时,轮子推动汽车前进,转弯时,车轮与地面的摩擦力则提供整个汽车的向心力。
但是这个刚体引擎并不完整,它没有碰撞和连接、约束的处理,我曾尝试在引擎中加入这些,但是发现很复杂,所以后来就暂时搁置了这个项目。

APE物理引擎的刚体扩展试验:RigidParticle

For english version of this page, click here.

APE是一个用AS3.0编写的2D物理引擎,它以粒子系统为基础,你可以通过系统提供的粒子与弹簧来连接成你想要的物体。所以他不需要引入复杂的刚体运动的计算,也可以较好的模拟复杂物体的运动情况。这个方法虽然显著的减少了系统的复杂程度,但是另一方面,由于制作复杂物体需要许多粒子与弹簧做连接,而flash播放器本身效率就不高,所以在有些情况下系统速度会比较慢。

所以我产生了把基本的刚体运动引入这个引擎的想法,让它可以更高效率的模拟一些简单的刚体运动。例如一个方盒子的运动情况。实际上APE已经有方形的粒子模型,可以很好的处理碰撞与弹簧约束的情况,但是APE的RectangleParticle模型不能处理旋转,因为APE把它当作一个粒子来看,所以忽略了对它的旋转处理。我这个RigidParticle所做的,就是把这个方形粒子在受力时的旋转加速度考虑进去,让它更像一个真实世界的盒子。

下面就是RigidParticle的演示,里面没有用任何的弹簧约束,而全部都是RigidParticle在表演。

原文件可以在 这里找到

Flash JSFL:批量输出fla文件

当你处理一大堆flash的时候,特别是当它们每个都非常大的时候,常常需要很多时间来发布,一个一个打开来发布很麻烦,而且你要一直守在那里,flash发布的资源占用之大又使你不能干别的事情。还有一种更麻烦的情况是,可能你的电脑由于字体安装或性能的问题,你要把发布的工作拿到其他电脑上完成,这时你可能会想如果flash有批量发布的功能该有多好。。。
但是flash更新了几个版本,始终都没有批处理功能。

Flash JSFL:自动添加版本信息

Flash开发通常很小,很快速,于是大家通常懒得在源文件里面添加版本信息,但是有版本信息是很有用的,至少你可以通过版本号判断你正在测试的是否是最新版本(如果你经常做网站上的flash开发,你应该很能理解这种缓存带来的痛苦),在多人共同开发的情况下,如果每次修改都加上作者和修改时间的资料,也会对管理带来很大的方便。

聚合内容