NVisionXR_iOS教程七 —— 场景中物体运动

本章节教大家如何让立方体按照自己想要的轨迹运动。 
添加头文件#import''NVAnimationEffect.h'',在onCreate方法中实例该动画类,代码如下图: 
1、立方体移动 
 
代码:

   /** 
     * 构建一个NVAnimationEffect对象 
     * name 可以随便取,但是要唯一 
     * context 传入场景即可 
     * widget 作用的NVWidget对象,本例传入的是立方体 
     * duration 运动的总时长 
     */ 
    NVAnimationEffect *move = [[NVAnimationEffect alloc] initWithAnimation:@"moveAni" Context:self Widget:cube Duration:4.0]; 
     
    // 设置关键帧 
    // 在4秒内从(0,0,0)的位置线形的移动到(0,10,0)的位置 
    [move createKeyFrameWithTimePos:0 Pos:NVPosition(0.0, 0.0, 0.0) Type:TRANSLATE]; 
    [move createKeyFrameWithTimePos:4 Pos:NVPosition(0.0, 10.0, 0.0) Type:TRANSLATE];     
    // 是否循环播放动画 
    [move setLoop:YES]; 
   
    // 将动画对象添加到场景中 
    [self addAnimEffect:move]; 
  
    // 开始执行运动 
    [move start];

2、立方体边移动边缩放 
 
代码:

 // 设置关键帧 
    // 在4秒内从(0,0,0)的位置线形的移动到(0,10,0)的位置 
    [move createKeyFrameWithTimePos:0 Pos:NVPosition(0.0, 0.0, 0.0) Type:TRANSLATE]; 
    [move createKeyFrameWithTimePos:4 Pos:NVPosition(0.0, 10.0, 0.0) Type:TRANSLATE]; 
     
    // 新开一个运动轨道,在4秒内从1倍放大到5倍 
    [move createKeyFrameWithTimePos:0 Pos:NVPosition(1.0, 1.0, 1.0) Type:SCALE]; 
    [move createKeyFrameWithTimePos:4 Pos:NVPosition(5.0, 5.0, 5.0) Type:SCALE];

3、立方体边移动边缩放边自旋转 
 
代码:

// 设置关键帧 
    // 在4秒内从(0,0,0)的位置线形的移动到(0,10,0)的位置 
    [move createKeyFrameWithTimePos:0 Pos:NVPosition(0.0, 0.0, 0.0) Type:TRANSLATE]; 
    [move createKeyFrameWithTimePos:4 Pos:NVPosition(0.0, 10.0, 0.0) Type:TRANSLATE]; 
     
    // 新开一个运动轨道,在4秒内从1倍放大到5倍 
    [move createKeyFrameWithTimePos:0 Pos:NVPosition(1.0, 1.0, 1.0) Type:SCALE]; 
    [move createKeyFrameWithTimePos:4 Pos:NVPosition(5.0, 5.0, 5.0) Type:SCALE]; 
     
    // 新开一个运动轨道,在4秒内绕z轴旋转360度 
    [move createKeyFrameWithTimePos:0 Pos:NVPosition(0.0, 0.0, 0.0) Type:ROTATION]; 
    [move createKeyFrameWithTimePos:4 Pos:NVPosition(0.0, 0.0, 360.0) Type:ROTATION];

4、贝塞尔曲线 
添加头文件#import''NVBezierPath.h'', 在onCreate方法中实例该轨迹类,代码如图 
 
代码:

 /**
 
     * startPoint 轨迹的起始点 
     * controlPoint1 控制点1 
     * controlPoint2 控制点2 
     * startPoint 轨迹的结束点 
     **/ 
    NVVector3f startPoint = NVPosition(10.0, 0, 5.5); 
    NVVector3f controlPoint1 = NVPosition(6.0, 0, 3.5); 
    NVVector3f controlPoint2 = NVPosition(8.0, 0, 4.5); 
    NVVector3f endPoint = NVPosition(10.0, 0, 0.0); 
    // 实例话贝塞尔曲线对象 
    mMainPath = [[NVBezierPath alloc] initWithBezier:mContext Name:@"BezierPath"]; 
    // 设置曲线的精细程度 
    [mMainPath setSubdivision:mSubdivision]; 
    // 设置贝塞尔轨迹起始点 
    [mMainPath setPoints:startPoint EndPoint:endPoint]; 
    // 设置控制点 
    [mMainPath setControlPoints:controlPoint1 Point2:controlPoint2]; 
    // 描边绘制 
    [mMainPath stroke]; 
   // 实例话动画对象
 
    NVAnimationEffect *move = [[NVAnimationEffect alloc] initWithAnimation:@"moveAni" Context:self Widget:cube Duration:4.0]; 
    // 将贝塞尔曲线设置到动画中 
    [move selectPath:mMainPath Type:TRANSLATE]; 
    // 是否循环播放动画 
    [move setLoop:YES]; 
     
    // 将动画对象添加到场景中 
    [self addAnimEffect:move]; 
     
    // 开始执行运动 
    [move start];

运行项目,可以看到立方体按照自己设置的轨迹运动起来了。

欢迎联系:

原文地址:http://blog.51cto.com/13683331/2093768

时间: 2024-08-28 11:49:25

NVisionXR_iOS教程七 —— 场景中物体运动的相关文章

NVisionXR_iOS教程六 —— 场景中对象交互

本章节将介绍如何与场景中的对象进行交互,接着上一章节的代码,我们往立方体对象 添加如下代码,并实现它的代理<HitEventDelegate>  代码:     // 创建一个立方体      NVBoxWidget *cube = [[NVBoxWidget alloc] initWithScenePlay:self WidgetName:@"cube"];      // 添加材质,传入的是对应的material 材质名      [cube setAppearance

Unity游戏开发的数学与物理 4 ( 在物体运动中加入重力 )

在物体运动中加入重力 实现注意: 使用级数叠加算法 y += vy; //对位置上的加速度 vy += GR: //速度上的加速度 GR为重力加速度,在计算机中使用的加速度单位是特殊的dot/F^2 (像素/平方帧),而不是9.8 m/s^2 (米/平方秒) 微分是一种操作,是一种求微分系数的操作, 而微分系数是指函数关于某个值的变化率,这个概念在游戏开发中经常被用来考察某个函数变化的速度; f(x)关于x的变化率,基本的微分公式 d/dx(x) = 1 d/dx(x^2) = 2x d/dx(

在unity中用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放

在场景中添加一个Plan,Camera,Directional Light,Cube.添加两个脚本scrollerScirpt(挂在Camera),CubeDragScript(挂在Cube上). 1.鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就可以实现,主要实现代码如下: void Update () { //鼠标滚轮的效果 //Camera.main.fieldOfView 摄像机的视野 //Camera.main.orthographicSize 摄像机的正交投影 //

Unity3D NGUI从背包中拖出并在场景中生成物体

http://www.cnblogs.com/zhanghaipeng-Unity3D/p/4732592.html 由于游戏需要从背包中拖出武器并在场景中相应的位置生成出来,所以研究了一下这个. 一般来说,在Unity3D开发中如果使用NGUI为游戏做UI,我们的场景和UI并不是使用一个相机进行渲染的,所以从背包中拖出物体并在场景相应的位置生成物体,就会涉及到UICamera和场景摄像机的转换.我在做这个时主要通过打射线来实现坐标转换. 如何创建一个可拖动的UI组件可以参考NGUI中的Exam

unity查找场景中所有物体

代码很简单就一句话,至于你想怎么用再往里面加东西就好 //查找场景中所有的物体 foreach (GameObject objj in UnityEngine.Object.FindObjectsOfType(typeof(GameObject))) { Debug.Log(objj.transform.name); } 原文地址:https://www.cnblogs.com/qq2351194611/p/11423827.html

Quick-Cocos2d-x初学者游戏教程(十一) ------------------ 物体碰撞检测

Quick-Cocos2d-x初学者游戏教程(十一) 本章主要讲解物体碰撞检测之间的原理,以及具体的实现方法. 碰撞检测 本游戏使用物理引擎的一个重要目的是为了让碰撞检测更方便,使用物理引擎可以进行精确的碰撞检测,而且执行的效率也很高. 在 Quick 3.3final 版本中,所有事件均有事件派发器统一管理,物理引擎的碰撞事件也不例外.它由 cc.EventListenerPhysicsContact 的实例来监听. 监听事件分类 碰撞监听事件有以下几种: cc.Handler.EVENT_P

Laravel教程 七:表单验证 Validation

Laravel教程 七:表单验证 Validation 此文章为原创文章,未经同意,禁止转载. Laravel Form 终于要更新这个Laravel系列教程的第七篇了,期间去写了一点其他的东西. 就不 说废话了吧,直接进入Form Validation的部分吧.几乎在每一个web应用当中都会有表单,而有表单基本就离不开表单验证.在laravel中,其实可以说是有两种方式来进行表单验证:使用Request和使用Validation.下面将分开讲这两部分的内容,而且我会更着重第一种,也更推荐大家使

Unity 2D游戏开发教程之游戏中精灵的跳跃状态

Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却无法从低的地面移动到高的地面,因为当前的游戏精灵只能左右移动,即left和right.为了解决这个问题,本节就来为精灵添加跳跃状态.   图2-14  精灵从一个地面移动到另一个地面 (1)如果要为精灵添加跳跃状态,即jump,就不得不再引入其它状态: q   landing:用于表示精灵接触到地面

在WebGL场景中使用2DA*寻路

  这篇文章将讨论如何在一个自定义的地面网格上进行简单的2D寻路,以及确定路径后如何使用基于物理引擎的运动方式使物体沿路径到达目标地点.读者需要预先对WebGL和Babylonjs知识有一些了解,可以参考我录制的WebGL入门视频教程和翻译的官方入门文档,当然也可以用自己喜欢的其他方式来学习. 文章主要分成如下几部分: 1.自定义地面网格与寻路矩阵 2.生成Babylon格式3D模型 3.使用pathfinding库进行2D寻路 4.基于cannon.js物理引擎使物体沿路径移动 场景可以通过h