Away 3D 之 交互和渐变----Interactivity and Tweening
在这个教程中,你将学会如何创建一个地板对象,本教程中的地板是可交互的并且能够移动小方块到鼠标的点击的地方。
1. 设置场景:
你正在创建的场景包含了一个平面,地板和一个看起来像一个饰品的方块,还有一个对着整个场景的相机。首先你应该创建一个View3D对象并且设置如下的相机属性。
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT; //setup the view
_view = new View3D();
addChild(_view); //setup the camera
_view.camera.z = -600;
_view.camera.y = 500;
_view.camera.lookAt(new Vector3D());
现在场景设置好了,你可以增加对象了,小方块的边长是100 并且有一个 1x1x1 的分段。这样在每个面看起来都包括两个三角形,CubeGeometry构造函数中的最后一个变量 tile6决定了随后的纹理参数如何映射到多维数据集。这个例子中,false 意味着一个图像将在小方块的每个面重复出现。
//setup the scene
_cube = new Mesh(new CubeGeometry(100, 100, 100, 1, 1, 1, false), new TextureMaterial(Cast.bitmapTexture(TrinketDiffuse)));
_cube.y = 50;
_view.scene.addChild(_cube);
注意:小方块的Y属性被设置为50.这个立方体的中心复位垂直50单位(一半是高度),给人的印象立方体是躺在地板上。下一步,你要增加地板面,这个和之前的 基本视图教程 是一样的。
_plane = new Mesh(new PlaneGeometry(700, 700), new TextureMaterial(Cast.bitmapTexture(FloorDiffuse)));
_view.scene.addChild(_plane);
2. 使它能够交互
你的场景已经设置好了,现在是时候让他动起来了。首先你需要给地板对象增加一些额外的属性。以便当你用鼠标点击对象的时候能够抓取相应的信息。
第一步,你需要定义使用哪个鼠标动作(左键,右键等),
第二步,你需要启用鼠标动作对这个对象操作,默认是不可用的。这是为了减少系统开销。(自己想的)。鼠标采集系统允许你选择快/慢的精确度或者更慢/更快的精确度根据你自己的需要。
最后,你需要增加一个鼠标事件的监听器。当放开鼠标按钮的时候,调用一个方法。使用MouseEvent3D.MOUSE_UP事件。
_plane = new Mesh(new PlaneGeometry(700, 700), new TextureMaterial(Cast.bitmapTexture(FloorDiffuse)));
_plane.pickingCollider = PickingColliderType.AS3_FIRST_ENCOUNTERED;
_plane.mouseEnabled = true;
_view.scene.addChild(_plane);
//add mouse listener
_plane.addEventListener(MouseEvent3D.MOUSE_UP, _onMouseUp);
想要了解全部的鼠标点击系统,请参考之前的教程(我自己还没翻译。。。。)
3. 给方块加上动画。----渐变
你的对象已经放上去了,地板现在也能响应鼠标点击了,但是目前却不能做别的。现在你可以增加剩余的功能----根据鼠标的点击来移动小方块。当监听程序接收到MouseEvent3D.MOUSE_UP的事件,关于3d鼠标的信息就被存储到了event 的变量中。
在这个样例中,你需要知道鼠标点击地板的坐标。然后才能移动小方块到这个地方。幸运的是,Away3D在鼠标事件中存储了这些信息,你只需要取出即可。
假定你已经有了鼠标点击的位置的坐标,现在我们想要慢慢的移动小方块到那个地方。这需要一个库文件。该例子使用了Tweener 这个类。
你的方块将通过一个曲线运动从当前的位置移动到新的位置。Y坐标并不需要改变,这次你只关心X 和 Z 坐标。你需要首先初始化你要使用的曲线对象。用下面的方法即可。这个只需要初始化一次即可。因此在类的构造函数中调用。
//initialize Tweener curve modifiers
CurveModifiers.init();
MouseEvent.MOUSE_UP 事件监听函数创建了一个新的Tweener对象来移动方块。方块对象是第一个变量,第二个变量是一个对象包含如下“To”位置的属性值。有许多特殊的属性能够影响tween 函数。例如:“Time”改变了整体的持续时间。“_bezier” 属性定义了 贝塞尔曲线 的控制点来控制对象移动的路线。
/**
* mesh listener for mouse up interaction
*/
private function _onMouseUp(ev:MouseEvent3D) : void
{
Tweener.addTween(_cube, { time:0.5, x:ev.scenePosition.x, z:ev.scenePosition.z, _bezier:{x:_cube.x, z:ev.scenePosition.z} });
}
这个样例也包含一个Event.ENTER_FRAME 处理函数和一个响应Event.RESIZE函数的舞台对象。Event.ENTER_FRAME这个函数只是调用了一下 _view.render()方法来确保场景被重新描绘。同时,RESIZE处理函数确保3D场景占用全屏。
当你点击地板的时候,你将看到小方块通过贝塞尔曲线移动到你鼠标点击的那个位置。
总结:
在这个教程中。你在一次看到了如何构造一个简单的包含一定数量对象的场景。同时,你也了解了如何通过鼠标来实现和场景中对象的交互,以及实现对相对于鼠标事件的响应。
Away 3D 之 交互和渐变----Interactivity and Tweening的更多相关文章
- AlloyTouch与three.js 3D模型交互
如你所见,上面的cube的旋转.加速.减速停止都是通过AlloyTouch去实现的. 演示 代码 <script src="asset/three.js"></s ...
- 如何实现TWaver 3D颜色渐变
一般而言,须要实现3D物体的渐变,通常的思路就是通过2D绘制一张渐变canvas图片作为3D对象的贴图.这样的方式是能够解决这类问题的.只是对于一般用户而言,通过2D生成一张渐变的图片.有一定的难度, ...
- 基于 WebGL 3D 的 HTML5 档案馆可视化管理系统
前言 档案管理系统是通过建立统一的标准以规范整个文件管理,包括规范各业务系统的文件管理的完整的档案资源信息共享服务平台,主要实现档案流水化采集功能.为企事业单位的档案现代化管理,提供完整的解决方案,档 ...
- 基于 HTML5 的 WebGL 3D 档案馆可视化管理系统
前言 档案管理系统是通过建立统一的标准以规范整个文件管理,包括规范各业务系统的文件管理的完整的档案资源信息共享服务平台,主要实现档案流水化采集功能.为企事业单位的档案现代化管理,提供完整的解决方案,档 ...
- 基于 HTML5 的工业组态高炉炼铁 3D 大屏可视化
前言 在大数据盛行的现在,大屏数据可视化也已经成为了一个热门的话题.大屏可视化可以运用在众多领域中,比如工业互联网.医疗.交通.工业控制等等.将各项重要指标数据以图表.各种图形等形式表现在一个页面上, ...
- 论文翻译——Rapid 2D-to-3D conversion——快速2D到3D转换
https://blog.csdn.net/qq_33445835/article/details/80143598 目前想做一个关于2D转3D的项目,由于国内资料比较少而且大部分都是基于国外的研究 ...
- Rapid 2D-to-3D conversion——快速2D到3D转换
https://blog.csdn.net/qq_33445835/article/details/80143598 目前想做一个关于2D转3D的项目,由于国内资料比较少而且大部分都是基于国外的研究 ...
- Unity3D实现3D立体游戏原理及过程
Unity3D实现3D立体游戏原理及过程 183 0 0 下面的教程是我今天整理的资料,教大家一步步完成自己的3D立体游戏,并向大家介绍一些3D成像的原理. 理论上,每个普通的非立体3 ...
- Android线性渐变
布局实现: 1. 在res中建立drawable文件夹. 2. 在drawable文件夹中建立shape.xml. 3. shape.xml的代码如下: <?xml version=" ...
随机推荐
- linux下用非root用户重启导致ssh无法连接的问题
问题描述 安装好了centOS服务器,一直用Secure CRT工具通过ssh服务来远程连接linux,很方便的进行各种操作.今天偶然尝试了一下在非root的一般用户下执行重启服务器的命令,发现一般用 ...
- 【mongoDB中级篇①】游标cursor
简述 通俗的说,游标不是查询结果,可以理解为数据在遍历过程中的内部指针,其返回的是一个资源,或者说数据读取接口. 客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量 ...
- AsyncTask 与 Thread+Handler
AsyncTask是封装好的线程池,比起Thread+Handler的方式,AsyncTask在操作UI线程上更方便,因为onPreExecute().onPostExecute()及更新UI方法on ...
- Delphi语言获得生命的原因和过程
都说Anders Hejlsberg是Delphi语言的作者,前一阵仔细读了VCL源码,惊叹于它的巧夺天工,未免对编译器的作者有些不服气,觉得首功不是他.今天仔细想了想,还是觉得不服不行.以下是我的理 ...
- WCF入门(十一)---WCF安全
一个强大的WCF服务安全系统,拥有两种安全模式或级别预期的客户端可以访问的服务.这是常见的分布式事务的安全威胁正在放缓,在很大程度上由WCF决定. 关键的安全功能 WCF服务有四个主要的安全功能,如下 ...
- linux kernel启动流程
linux kernel启动是从./init/main.c中开始的,其大概流程是: 1. 调用start_kernel()函数: 2. start_kernel()调用rest_init()函数: 3 ...
- Vim的可视模式
可视模式可以看到选中的字符串, 并对其进行操作 v:进入字符选择模式 V:进入行选择模式 ctrl-v(Window是ctrl-q):进入block选择模式 o:移动光标到选择的另一端 O:移动光标到 ...
- selvert的过滤器filter处理中文乱码
注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...
- $.post()
定义和用法 post() 方法通过 HTTP POST 请求从服务器载入数据. jQuery.post(url,data,success(data, textStatus, jqXHR),dataTy ...
- bzoj2875: [Noi2012]随机数生成器
矩阵乘法. x[n] = {x[0],1} * ( {a,0} ^ n ) {b,1} 写成这样谁能看懂.... noi里的大水题.我居然 #include<cstdio> #includ ...