[ActionScript 3.0] 透视投影
下面的示例演示如何使用透视投影来创建 3D 空间。该示例演示如何通过projectionCenter属性来修改消失点和更改空间的透视投影。进行这种修改后,将强制重新计算focalLength和fieldOfView(及其相关的 3D 空间扭曲)。
此示例:
创建一个名为center的 sprite,作为包含十字准线的圆
将centersprite 的坐标指定给根的transform属性的perspectiveProjection属性的projectionCenter属性
为鼠标事件添加事件侦听器,用于调用修改projectionCenter的处理程序,以便跟踪center对象的位置
创建四个折叠样式的框,这四个框将形成透视空间的墙壁
在测试此示例时,ProjectionDragger.swf 将圆拖动到不同的位置。消失点将跟随圆移动,直到释放圆时才固定下来。在移动投影中心使其远离舞台中心时,观察包围空间的框所发生的拉伸和出现的扭曲。
package
{
import flash.display.Sprite;
import flash.display.Shape;
import flash.geom.Point;
import flash.events.*;
public class ProjectionDragger extends Sprite
{
private var center:Sprite;
private var boxPanel:Shape;
private var inDrag:Boolean = false; public function ProjectionDragger():void
{
createBoxes();
createCenter();
}
public function createCenter():void
{
var centerRadius:int = 20; center = new Sprite ; // circle
center.graphics.lineStyle(1,0x000099);
center.graphics.beginFill(0xCCCCCC,0.5);
center.graphics.drawCircle(0,0,centerRadius);
center.graphics.endFill();
// cross hairs ;
center.graphics.moveTo(0,centerRadius);
center.graphics.lineTo(0, - centerRadius);
center.graphics.moveTo(centerRadius,0);
center.graphics.lineTo( - centerRadius,0);
center.x = 175;
center.y = 175;
center.z = 0;
this.addChild(center); center.addEventListener(MouseEvent.MOUSE_DOWN,startDragProjectionCenter);
center.addEventListener(MouseEvent.MOUSE_UP,stopDragProjectionCenter);
center.addEventListener(MouseEvent.MOUSE_MOVE,doDragProjectionCenter);
root.transform.perspectiveProjection.projectionCenter = new Point(center.x,center.y);
}
public function createBoxes():void
{
// createBoxPanel();
var boxWidth:int = 50;
var boxHeight:int = 50;
var numLayers:int = 12;
var depthPerLayer:int = 50; // var boxVec:Vector.<Shape> = new Vector.<Shape>(numLayers);
for (var i:int = 0; i < numLayers; i++) {
this.addChild(createBox(150,50,(numLayers - i) * depthPerLayer,boxWidth,boxHeight,0xCCCCFF));
this.addChild(createBox(50,150,(numLayers - i) * depthPerLayer,boxWidth,boxHeight,0xFFCCCC));
this.addChild(createBox(250,150,(numLayers - i) * depthPerLayer,boxWidth,boxHeight,0xCCFFCC));
this.addChild(createBox(150,250,(numLayers - i) * depthPerLayer,boxWidth,boxHeight,0xDDDDDD));
}
} public function createBox(xPos:int=0,yPos:int=0,zPos:int=100,w:int=50,h:int=50,color:int=0xDDDDDD):Shape
{
var box:Shape = new Shape ;
box.graphics.lineStyle(2,0x666666);
box.graphics.beginFill(color,1.0);
box.graphics.drawRect(0,0,w,h);
box.graphics.endFill();
box.x = xPos;
box.y = yPos;
box.z = zPos;
return box;
}
public function startDragProjectionCenter(e:Event)
{
center.startDrag();
inDrag = true;
} public function doDragProjectionCenter(e:Event)
{
if (inDrag) {
root.transform.perspectiveProjection.projectionCenter = new Point(center.x,center.y);
}
} public function stopDragProjectionCenter(e:Event)
{
center.stopDrag();
root.transform.perspectiveProjection.projectionCenter = new Point(center.x,center.y);
inDrag = false;
}
}
}
效果如图:

[ActionScript 3.0] 透视投影的更多相关文章
- ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助. 目录 ActionScript 3.0简介 Hello ...
- ActionScript 3.0 for the Lunder Algorithm
package com.feiruo.Calendar.LunderCalendar { /* *@ClassName: package:com.feiruo.Calendar.LunderCalen ...
- [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
本文转自:http://www.cnblogs.com/artwl/p/3396330.html 近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0, ...
- [ActionScript 3.0] AS3.0 动态加载显示内容
可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...
- 【转】学习Flex ActionScript 3.0 强烈推荐电子书
学习Flex ActionScript 3.0 强烈推荐电子书 AdvancED ActionScript 3.0 Animation(<Make things move>姐妹篇,强烈推 ...
- ActionScript 3.0 API 中的 Video 类
注:这个类在Flash流媒体开发中使用的很频繁,在此记录一下它的使用方法. 包 flash.media 类 public class Video 继承 Video DisplayObject Ev ...
- [ActionScript 3.0] as3处理xml的功能和遍历节点
as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...
- [ActionScript 3.0] 正则表达式
正则表达式: 正则表达式最早是由数学家Stephen Kleene在对自然语言的递增研究成果的基础上,于1956提出来的.具有完整语法的正则表达式,主要使用在字符串的格式的匹配方面上,后来也逐渐应用到 ...
- 在 Flash ActionScript 2.0 中调用 Javascript 方法
本篇文章由:http://xinpure.com/call-the-javascript-method-in-flash-actionscript-2-0/ 在 Flash ActionScript ...
随机推荐
- VUE+WebPack游戏设计:'乘法防线'游戏设计
- Spring Data JPA动态查询(多条件and)
entity: @Entity @Table(name = "data_illustration") public class Test { @Id @GenericGenerat ...
- 关于新建XIB去关联控制器,报错- the view outlet was not set
凡事必勤,切勿眼高手低.这是我对于自己惰性的又一次的自我认识与批评.以前遇见而又解决的问题,当时没有记录,以为都是小CASE,直到积累了广泛的问题和技能,遇见了相同的问题,而又忘记了,又一次认识到笔记 ...
- 制作initramfs/initrd镜像
Linux kernel在自身初始化完成之后,需要能够找到并运行第一个用户程序(这个程序通常叫做"init"程序).用户程序存在于文件系统之中,因此,内核必须找到并挂载一个文件系统 ...
- [SoapUI] 怎样确定一个应答报文的格式是不是标准的JSON
有一个网站 : http://jsonviewer.stack.hu/ 将Response的文本贴进去,如果是标准的JSON格式,就可以以JSON的view显示出来
- CTE递归限制次数
CTE可以用来取递归,网上资料很多,这里就不再叙述了,今天遇到的需求是要限制只取2级,然后加了个临时的lev with tree as(select [CustomerID],[CustomerNam ...
- python操作mysql数据库系列-安装MySQLdb
一波三折,先是pip命令出现问题,然后各种方法尝试解决.然后是直接使用pip2命令安装报错,mysql-python库安装再次出现问题.于是使用国内镜像的方式去安装:pip2 install MySQ ...
- 什么是awt ?
http://docs.oracle.com/javase/6/docs/technotes/guides/awt/ Abstract Window Toolkit (AWT) The Abstrac ...
- Mac上phantomjs装了不能用的解决
下了,装了.然后整这句命令: phantomjs --version 直接报错.. 查了半天的官方文档,居然连个毛线都么找到.终于...墨迹到了一个方法,就抱着试一试的心态在terminal里输入了这 ...
- Cocos2d-x-2.2.2开发环境配置
1.安装各种软件: Android SDK Android NDK Apache Ant Python Eclipse(adt) Cygwin(可选) Java Cocos2d-x 2.系统环境变量配 ...