package { 

import flash.display.Sprite; 

public class Tree extends Sprite { 

   public var xpos:Number = 0; 

public var ypos:Number = 0; 

   public var zpos:Number = 0; 

   public function Tree() { 

init(); 

   } 

   public function init():void { 

graphics.lineStyle(0, 0x00ff00); // 树的颜色

graphics.lineTo(0, -140 - Math.random() * 20);   // 树干

graphics.moveTo(0, -30 - Math.random() * 30); 

graphics.lineTo(Math.random() * 80 - 40, // 随机生成的树枝

-100 - Math.random() * 40); 

graphics.moveTo(0, -60 - Math.random() * 40); 

graphics.lineTo(Math.random() * 60 - 30, 

-110 - Math.random() * 20); 

   } 

} 

}
------------------------------------------------------------------------------
// 利用简单树组成的森林 package { import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; [SWF(backgroundColor=0x000000)]; // 设置背景为黑色,但不知为什么无效 public class Trees extends Sprite { private var trees:Array; // 存放所有的树 private var numTrees:uint = 100; // 定义100颗够了 private var fl:Number = 250; // 屏幕距离眼睛一般设置为200--300 private var vpX:Number = stage.stageWidth / 2; // 物体太小后消失点 private var vpY:Number = stage.stageHeight / 2; private var floor:Number = 50; // 水平面高度 private var vz:Number = 0; // Z轴透视深度速度 private var friction:Number = 0.98; // 阻尼系数 public function Trees() { init(); } private function init():void { trees = new Array(); for (var i:uint = 0; i < numTrees; i++) { var tree:Tree = new Tree(); // 生成树 trees.push(tree); tree.xpos = Math.random() * 2000 - 1000; tree.ypos = floor; tree.zpos = Math.random() * 10000; addChild(tree); // } addEventListener(Event.ENTER_FRAME, onEnterFrame); stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); } private function onEnterFrame(event:Event):void { for (var i:uint = 0; i < numTrees; i++) { var tree:Tree = trees; move(tree); } vz *= friction; // 阻尼后的Z轴方向的速度 sortZ(); // Z轴消隐 } private function onKeyDown(event:KeyboardEvent):void { // 加减速控制 if (event.keyCode == Keyboard.UP) { vz -= 1; } else if (event.keyCode == Keyboard.DOWN) { vz += 1; } } private function move(tree:Tree):void { tree.zpos += vz; // 更新移动距离(速度) if (tree.zpos < -fl) { // 如果树走到眼睛后面,则移动到远处 tree.zpos += 10000; } if (tree.zpos > 10000 - fl) { // 如果树太远,大于屏幕外1000则移回 tree.zpos -= 10000; } var scale:Number = fl / (fl + tree.zpos); // 计算透视深度系数 tree.scaleX = tree.scaleY = scale; tree.x = vpX + tree.xpos * scale; tree.y = vpY + tree.ypos * scale; tree.alpha = scale * .7 + .3; // 不同距离用不同的alpha混色,显示大气透视(朦胧感) } private function sortZ():void { trees.sortOn("zpos", Array.DESCENDING | Array.NUMERIC); for (var i:uint = 0; i < numTrees; i++) { var tree:Tree = trees; setChildIndex(tree, i); } } } }

  

简单的3D森林的更多相关文章

  1. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  2. SceneKit:简单的3D游戏场景搭建

    SceneKit是Apple用来开发休闲3D游戏的框架,不同于底层的OpenGL库,你仅仅需要很少的代码就可以快速看到实际的3D场景效果.下面简单的聊聊搭建一个3D游戏场景需要做的事情. 首先你必须用 ...

  3. 如何制作简单的 3D 打印模型

    Hi 大家好! 了解一个方兴未艾,但极为有趣的话题 — 3D 打印 . 为了帮助大家对3D打印有一个初步的感性认识,我在线制作了一款可用于3D打印的model, 大家可以先通过体验这个在线 model ...

  4. Python>>>创建一个简单的3D场景

    首先安装PyOpengl pip install PyOpenGL PyOpenGL_accelerate

  5. ZAM 3D 制作简单的3D字幕 流程(一)

    本文原地址-> http://www.cnblogs.com/yk250/p/5663048.html 效果参考图:请查阅 http://www.cnblogs.com/yk250/p/5662 ...

  6. 简单的3D图片轮播dome

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 一个简单的3D范例,是在别人基础上面整理的。

    一个简单的范例,是在别人基础上面整理的.原来的例子,框图太乱了,没有条理感. http://pan.baidu.com/s/1eQTyGCE

  8. css3加js做一个简单的3D行星运转效果

    前几天在园子里看到一篇关于CSS3D行星运转的文章,原文在这里,感觉这个效果也太酷炫了,于是自己也就心血来潮的来尝试的做了一下.因为懒得去用什么插件了,于是就原生的JS写,效果有点粗超,还有一些地方处 ...

  9. 简单的3d变换

    <!DOCTYPE html><html> <head>  <meta charset="UTF-8">  <title> ...

随机推荐

  1. 洛谷 P2949 [USACO09OPEN]工作调度Work Scheduling 题解

    P2949 [USACO09OPEN]工作调度Work Scheduling 题目描述 Farmer John has so very many jobs to do! In order to run ...

  2. 第06组 Alpha事后诸葛亮

    一.组长博客: https://www.cnblogs.com/mhq-mhq/p/11923194.html 二.Postmortem模板 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚 ...

  3. 范仁义html+css课程---4、文本标签

    范仁义html+css课程---4.文本标签 一.总结 一句话总结: 文本标签大致掌握一下,做到它站在你对面的时候最好认得,认不得也没关系,直接百度 1.ins标签.u标签和del标签 作用? ins ...

  4. sql查询最近7天数据(以年-月-日结果展示)

    sql代码如下: , 查询结果如下:

  5. SQL Server 变量定义

    declare @id intdeclare @name char(10) --注意:char(10)为10位,要是位数小了会让数据出错set @id=1 set @name='sssss'selec ...

  6. sqlite3 读写锁

    转载:https://blog.csdn.net/u012218838/article/details/79362929(sqlite3 使用读写锁SRWLOCK例子) 转载:https://my.o ...

  7. 同时购入两台同款thinkpad笔记本电脑,分别使用同一账户激活office失败--------------解决方法(账户下有多个Office激活信息,重装后提示“许可证不正确或者最大激活次数”)

    如题所述,该问题曾多次与京东商城售后,京东thinkpad品牌售后,thinkpad售后等进行沟通,最后通过微软的电话激活才成功,不过在之后发现了这么一个帖子,应该是官方给出的,应该合理,没有实际验证 ...

  8. navicat for mysql 如何设置字段唯一

    在设计表时,上面会有索引这一项 点开,在栏位处选择你需要设置的字段,然后选择unique索引类型即可 望采纳,谢谢!

  9. RabbitMQ整合Spring Booot【点对点模式】

    pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...

  10. [LeetCode] 246. Strobogrammatic Number 对称数

    A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...