返回列表 发帖

[原创]Flash三维向量类的应用讲座(1)

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

其实这个例子用不到太复杂的方法,只是简单的应用了向量的加法和和二维向量的转化。
欢迎光临我的个人空间:★四维空间★

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


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

[ Last edited by 紫色流星 on 2005-10-15 at 18:45 ]
欢迎光临我的个人空间:★四维空间★

TOP

以开始讲了
赶快搬个凳子过来听
从小就牛B

TOP

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

并且连接导出为snow

效果如下:

警告.JPG (26.35 KB)

警告.JPG

欢迎光临我的个人空间:★四维空间★

TOP

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

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

  1. #include "Vector3D.as"
  2. Stage.scaleMode = "noScale";
复制代码
欢迎光临我的个人空间:★四维空间★

TOP

再设置一些基本变量:

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);
复制代码
欢迎光临我的个人空间:★四维空间★

TOP

建立一个雪花的类

  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. };
复制代码
欢迎光临我的个人空间:★四维空间★

TOP

一个雪花的方法

  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. };
复制代码
欢迎光临我的个人空间:★四维空间★

TOP

对影片的初始化:

  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. };
复制代码
欢迎光临我的个人空间:★四维空间★

TOP

影片的数据处理数据

  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. };
复制代码
欢迎光临我的个人空间:★四维空间★

TOP

返回列表