在这个教程中,你将学会如何创建一个地板对象,本教程中的地板是可交互的并且能够移动小方块到鼠标的点击的地方。

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的更多相关文章

  1. AlloyTouch与three.js 3D模型交互

    如你所见,上面的cube的旋转.加速.减速停止都是通过AlloyTouch去实现的. 演示 代码 <script src="asset/three.js"></s ...

  2. 如何实现TWaver 3D颜色渐变

    一般而言,须要实现3D物体的渐变,通常的思路就是通过2D绘制一张渐变canvas图片作为3D对象的贴图.这样的方式是能够解决这类问题的.只是对于一般用户而言,通过2D生成一张渐变的图片.有一定的难度, ...

  3. 基于 WebGL 3D 的 HTML5 档案馆可视化管理系统

    前言 档案管理系统是通过建立统一的标准以规范整个文件管理,包括规范各业务系统的文件管理的完整的档案资源信息共享服务平台,主要实现档案流水化采集功能.为企事业单位的档案现代化管理,提供完整的解决方案,档 ...

  4. 基于 HTML5 的 WebGL 3D 档案馆可视化管理系统

    前言 档案管理系统是通过建立统一的标准以规范整个文件管理,包括规范各业务系统的文件管理的完整的档案资源信息共享服务平台,主要实现档案流水化采集功能.为企事业单位的档案现代化管理,提供完整的解决方案,档 ...

  5. 基于 HTML5 的工业组态高炉炼铁 3D 大屏可视化

    前言 在大数据盛行的现在,大屏数据可视化也已经成为了一个热门的话题.大屏可视化可以运用在众多领域中,比如工业互联网.医疗.交通.工业控制等等.将各项重要指标数据以图表.各种图形等形式表现在一个页面上, ...

  6. 论文翻译——Rapid 2D-to-3D conversion——快速2D到3D转换

    https://blog.csdn.net/qq_33445835/article/details/80143598  目前想做一个关于2D转3D的项目,由于国内资料比较少而且大部分都是基于国外的研究 ...

  7. Rapid 2D-to-3D conversion——快速2D到3D转换

    https://blog.csdn.net/qq_33445835/article/details/80143598  目前想做一个关于2D转3D的项目,由于国内资料比较少而且大部分都是基于国外的研究 ...

  8. Unity3D实现3D立体游戏原理及过程

    Unity3D实现3D立体游戏原理及过程 183 0 0     下面的教程是我今天整理的资料,教大家一步步完成自己的3D立体游戏,并向大家介绍一些3D成像的原理.     理论上,每个普通的非立体3 ...

  9. Android线性渐变

    布局实现: 1. 在res中建立drawable文件夹. 2. 在drawable文件夹中建立shape.xml. 3. shape.xml的代码如下: <?xml version=" ...

随机推荐

  1. ios开发跳转

    如果我的是A->B->C后,我想直接从 C->A 应该怎么做???这是我的问题    看了这个帖子不太明白      这是10楼的解决办法 , 虽然 写的很清楚 ,但是还是没懂啊  ...

  2. 英特尔Intel

    公司名称 英特尔(集成电路公司)Intel Corporation(Integrated Electronics Corporation) 英特尔公司是全球最大的半导体芯片制造商,它成立于1968年, ...

  3. linux 显示当前用户信息

    1.w命令 2.who命令 3.who am i 4. users

  4. [iOS]开发者证书和描述文件的作用

    先说下证书吧. 然后是描述文件

  5. 6、JPA_映射单向多对一的关联关系(n的一方有1的引用,1的一方没有n的集合属性)

    单向多对一的关联关系 具体体现:n的一方有1的引用,1的一方没有n的集合属性 举个例子:订单Order对顾客Customer是一个单向多对一的关联关系.Order是n的一方,有对Customer的引用 ...

  6. 海明距离hamming distance

    仔细阅读ORB的代码,发现有很多细节不是很明白,其中就有用暴力方式测试Keypoints的距离,用的是HammingLUT,上网查了才知道,hamming距离是相差位数.这样就好理解了. 我理解的Ha ...

  7. JNI读取assets资源文件

    源自:http://www.rosoo.net/a/201112/15459.html assets目录底下的文件会被打包到一个apk文件里,这些资源在安装时他们并没被解压,使用时是直接从apk中读取 ...

  8. IOS设置背景色设置最简单方法

    [self.view setBackgroundColor:[UIColor clearColor]];

  9. NDK(22)JNI编程如何避免常见缺陷

    转自 : http://www.ibm.com/developerworks/cn/java/j-jni/index.html 避免常见缺陷 假设您编写了一些新 JNI 代码,或者继承了别处的某些 J ...

  10. [UVA796]Critical Links(割边, 桥)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...