本章节教大家如何让立方体按照自己想要的轨迹运动。
添加头文件#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];
运行项目,可以看到立方体按照自己设置的轨迹运动起来了。