Board logo

标题: [原创]Flash三维向量类的应用讲座(1) [打印本页]

作者: 紫色流星    时间: 2005-10-15 18:31     标题: [原创]Flash三维向量类的应用讲座(1)

以前讲了如何用面向对象的方法来实现在Flash中建立一个三维的向量类,这一次讲一个例子,来说明这个类在实际中的应用。

其实这个例子用不到太复杂的方法,只是简单的应用了向量的加法和和二维向量的转化。
作者: 紫色流星    时间: 2005-10-15 18:32

所以,使用模拟空间的雪花下落来实现这个例子。


Flash: http://ilovelassie.tengyi.cn/flash/direct/3Dsnow.swf

[ Last edited by 紫色流星 on 2005-10-15 at 18:45 ]
作者: 风中落叶    时间: 2005-10-15 18:34

以开始讲了
赶快搬个凳子过来听
作者: 紫色流星    时间: 2005-10-15 18:38

首先,建立一个电影剪辑。画一个白色的实心圆,半径4.5,圆心0,0

并且连接导出为snow

效果如下:

图片附件: 警告.JPG (2005-10-15 18:38, 26.35 KB) / 下载次数 10
http://heubbs.cn/attachment.php?aid=2107&k=a677f0aa564651ba09a9a4f184fdcee3&t=1732404776&sid=SA49O3


作者: 紫色流星    时间: 2005-10-15 18:44

然后在第一帧输入如下代码:

引用我们编写的三维类,设置舞台不缩放。

  1. #include "Vector3D.as"
  2. Stage.scaleMode = "noScale";
复制代码

作者: 紫色流星    时间: 2005-10-15 19:12

再设置一些基本变量:

d是观察距离
a是存储雪花的数组
i是循环变量
q是雪花数量
w是雪花在空间的空间限制,不超过正负q/2
speed 就是雪花移动的速度,可以由鼠标滚轮控制

  1. var d:Number = new Number(2000);
  2. var a:Array = new Array();
  3. var i:Number = new Number(0);
  4. var q:Number = new Number(200);
  5. var w:Number = new Number(q/2);
  6. var speed:Number = new Number(150);
复制代码

作者: 紫色流星    时间: 2005-10-15 19:12

建立一个雪花的类

  1. // Snow类的构造函数
  2. _global.Snow = function(x, y, z, n) {
  3.         this.scale = random(80)+20;
  4.         this.pos = new v3d(x, y, z);
  5.         this.mc = _root.attachMovie("snow", "snow"+n, n);
  6. };
复制代码

作者: 紫色流星    时间: 2005-10-15 19:14

一个雪花的方法

  1. // 刷新位置
  2. Snow.prototype.update = function(d) {
  3.         var b = (this.pos.x+d)/20;
  4.         var v2 = this.pos.v3dtov2d(d);
  5.         this.mc.setXY(v2, true);
  6.         with (this.mc) {
  7.                 _xscale = _yscale=(b+20+this.scale)/3;
  8.         }
  9. };
复制代码

作者: 紫色流星    时间: 2005-10-15 19:22

对影片的初始化:

  1. _root.onLoad = function() {
  2.         for (var i = 0; i<25; i++) {
  3.                 a[i] = new Snow(random(4000)-2000, random(q)-w, random(q)-w, i);
  4.                 a[i].update(d);
  5.         }
  6.                 //复制25个雪花到数组,并且位置随机
  7.         mym = new Object();
  8.         mym.onMouseWheel = function(delta) {
  9.                 if (speed<50) {
  10.                         speed = 50;
  11.                 } else if (speed>500) {
  12.                         speed = 500;
  13.                 } else {
  14.                         _root.speed += delta*5;
  15.                 }
  16.         };
  17.         Mouse.addListener(mym);
  18.                 //建立一个监听鼠标滚轮事件的监听器。
  19. };
复制代码

作者: 紫色流星    时间: 2005-10-15 19:29

影片的数据处理数据

  1. _root.onEnterFrame = function() {
  2.         for (var i = 0; i<25; i++) {
  3.                 with (a[i].pos) {
  4.                         x += speed;
  5.                         y += (_root._xmouse-200)/50;
  6.                         z -= (_root._ymouse-200)/50;
  7.                 }
  8.                                 //雪花的移动跟随鼠标偏移
  9.                 if (a[i].pos.x>d-200) {
  10.                         a[i] = new Snow(-2000, random(q)-w, random(q)-w, i);
  11.                 }
  12.                                 //如果雪花超出范围则重新刷新位置
  13.                 a[i].update(d);
  14.                                //雪花的位置更新
  15.         }
  16.         _root.sp = "Speed="+speed;
  17.                 这个是在舞台上建立一个文本框来显示即时速度
  18. };
复制代码

作者: 紫色流星    时间: 2005-10-15 19:31

基本上把所有代码复制到Flash里面就可以了,执行速度还是很快的。

下次发一些稍微复杂点的应用。
作者: 风中落叶    时间: 2005-10-16 11:27

期待ing………………………………:P
作者: 紫色流星    时间: 2005-10-16 19:48

Originally posted by 风中落叶 at 2005-10-16 11:27:
期待ing………………………………:P

有没有做出来啊?
作者: 风中落叶    时间: 2005-10-16 20:30

Originally posted by 紫色流星 at 2005-10-16 07:48 PM:

有没有做出来啊?

做是做了
正在研究那些代码呢:P
作者: 紫色流星    时间: 2005-10-17 14:10

Originally posted by 风中落叶 at 2005-10-16 20:30:

做是做了
正在研究那些代码呢:P

有疑问的话我尽可能解答:P
作者: 风中落叶    时间: 2005-10-17 14:17

Originally posted by 紫色流星 at 2005-10-17 02:10 PM:

有疑问的话我尽可能解答:P

一定会的
谢谢先:P:handshake
作者: 戈薇    时间: 2005-10-17 19:33

我也来学习。。。。。

好东西~~~~~`
作者: 紫色流星    时间: 2005-10-18 09:41

呵呵~还得谢谢楼上两位的支持
作者: 戈薇    时间: 2005-10-21 21:59

8客气~期待新的讲座
作者: 紫色流星    时间: 2005-10-21 22:29

Originally posted by 戈薇 at 2005-10-21 21:59:
8客气~期待新的讲座

这几天忙着编写俄罗斯方块呢,过几天在传新作吧
作者: tope    时间: 2006-4-16 11:25

老大,继续努力哦
作者: Transient    时间: 2006-5-29 14:49

不玩Flash~路过支持原创....拒绝盗版




欢迎光临 工程家园 (http://heubbs.cn/) Powered by Discuz! 7.2