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); } } } }

  

最新文章

  1. c/c++系列的运算符优先级总结
  2. Linux启动报错missing operating system
  3. AngularJs学习第一课 Hello World
  4. Linux下php5.3编译oracle客户端
  5. 关于promise
  6. 使用Ant自动化发布web工程
  7. CSS3教程:box-sizing属性的理解border、padding与容器宽度的关系
  8. 一个web应用的诞生(10)--关注好友
  9. 201521123037 《Java程序设计》第7周学习总结
  10. MySQL模糊查询中通配符的转义
  11. Xcode中通过删除原先版本的程序来复位App
  12. 在Linux 安装Python3.5.6详细文档!!!!
  13. CAN总线芯片SN65HVD230QD介绍
  14. MybatisPlus使用介绍
  15. 当SQL Server的实例位于集群的特定节点时,数据库无法远程访问
  16. 收藏:FLASH中键检测与右键屏蔽
  17. collectionView 防止cell复用的方法
  18. JAVA EE期末项目-校园小商店
  19. 第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点
  20. SYS_R12 MOAC多组织的四个应用(案例)

热门文章

  1. CF1098E Fedya the Potter
  2. linux命令之------Wc命令(word count)
  3. shell脚本编程基础之for循环
  4. Python配置环境变量
  5. POI报表打印
  6. /usr/bin/xauth: file /home/user/.Xauthority does not exist
  7. LeetCode 7. 反转整数(Reverse Integer)
  8. Real-time Multiple People Tracking with Deeply Learned Candidate Selection and Person Re-identification
  9. asp.net core mvc 读取appsettings.config中文乱码问题
  10. osg::Node位置移动