本章节教大家如何让立方体按照自己想要的轨迹运动。
添加头文件#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];
// 设置关键帧
// 在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秒内从(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];
/**
* 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];
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。