ArcGlobe三维开发之十四————播放动画
2014-04-08 23:21
253 查看
在动画开发中,录制的一个动画可能只有一个Track也可能有多个Track。前面的博文提到动画的实现方式有两种,这里采用基于Camera的动画。这里我做的比较简单,首先来看实现效果图:
下面,我们来看,如何在Globe下实现动画的播放。来看下面的OMD图,从这张图里我们可以看出,Globe包含多个Track(轨迹),Track包含多个KeyFrame(关键帧);动画类型主要有基于Camera的和基于Layer,再有就是前面提到的基于关键帧的三种类型。那么具体如何做呢?我们一步一步来看:
(1)AnimationExtension
The AnimationExtension object is
the access point for other animation objects in ArcMap, Scene, and Globe.
Typically, when you work with animation objects, the AnimationExtension object needs to be obtained as the first step before other actions are performed.The
animation environment and animation track container objects can be accessed through the IAnimationExtension interface.
之前的博文提到了 IAnimationExtension 接口,这个地方说在操作动画对象前必须要首先获得AnimationExtension对象,通过该对象获得动画参数设置对象和动画轨迹容器对象。接口如下图所示:
代码如下:
对象后就可以设置播放的参数,比如播放模式,持续时间等参数
代码如下:
(3)设置完播放参数,下一步就应该是播放了,动画的播放主要用到IAGAnimationPlayer 接口,通过该接口可以播放,暂停,停止和录制动画。如下图所示:
代码如下:
(4)PlayAnimation方法需要三个参数:
第一个参数是Tracks,就是动画所包含的轨迹,这里动画可能包含多条轨迹,如果要播放其中的一条指定轨迹则需要对轨迹进行处理:
通过以上步骤就可以实现对动画的操作,至此,ArcGlobe组件开发之动画篇就结束了,希望对需要的童鞋有所帮助。
下面,我们来看,如何在Globe下实现动画的播放。来看下面的OMD图,从这张图里我们可以看出,Globe包含多个Track(轨迹),Track包含多个KeyFrame(关键帧);动画类型主要有基于Camera的和基于Layer,再有就是前面提到的基于关键帧的三种类型。那么具体如何做呢?我们一步一步来看:
(1)AnimationExtension
The AnimationExtension object is
the access point for other animation objects in ArcMap, Scene, and Globe.
Typically, when you work with animation objects, the AnimationExtension object needs to be obtained as the first step before other actions are performed.The
animation environment and animation track container objects can be accessed through the IAnimationExtension interface.
之前的博文提到了 IAnimationExtension 接口,这个地方说在操作动画对象前必须要首先获得AnimationExtension对象,通过该对象获得动画参数设置对象和动画轨迹容器对象。接口如下图所示:
代码如下:
IGlobe globe = globecontrol.Globe; IBasicScene2 basicscene = globe as IBasicScene2; IAnimationExtension animationEx = basicscene.AnimationExtension; agAnimationEnv = animationEx.AnimationEnvironment;(2)获取AGAnimationEnvironment
对象后就可以设置播放的参数,比如播放模式,持续时间等参数
代码如下:
//设置动画播放参数
private void SetAnimationEnv ()
{
//获取AGAnimationEnvironment对象
IGlobe globe = globecontrol.Globe; IBasicScene2 basicscene = globe as IBasicScene2; IAnimationExtension animationEx = basicscene.AnimationExtension; agAnimationEnv = animationEx.AnimationEnvironment;
agAnimationEnv.AnimationDuration = Convert.ToDouble(textBox_AnimationDuration.Text);//持续时间
agAnimationEnv.PlayType=esriAnimationPlayType.esriAnimationPlayTypeDuration; //播放模式
Set_Animation_PlayMode();
agAnimationEnv.PlayMode = animationPlayMode;
}
//设置播放模式
private void Set_Animation_PlayMode ()
{
switch (comboBox_PlayMode.Text)
{
case "正向播放一次":
animationPlayMode = esriAnimationPlayMode.esriAnimationPlayOnceForward;
break;
case "反向播放一次":
animationPlayMode = esriAnimationPlayMode.esriAnimationPlayOnceReverse;
break;
case "正向循环":
animationPlayMode = esriAnimationPlayMode.esriAnimationPlayLoopForward;
break;
case "正反循环":
animationPlayMode = esriAnimationPlayMode.esriAnimationPlayLoopReverse;
break;
default:
break;
}
}
(3)设置完播放参数,下一步就应该是播放了,动画的播放主要用到IAGAnimationPlayer 接口,通过该接口可以播放,暂停,停止和录制动画。如下图所示:
IAGAnimationPlayer agAnimationPlayer new AGAnimationEnvironmentClass();
agAnimationPlayer.PlayAnimation(agAnimationTracks,agAnimationEnv,null);
(4)PlayAnimation方法需要三个参数:
[C#]public void PlayAnimation ( IAGAnimationTrackspTracks, IAGAnimationEnvironmentpEnvironment, IStatusBarpStatusBar);
第一个参数是Tracks,就是动画所包含的轨迹,这里动画可能包含多条轨迹,如果要播放其中的一条指定轨迹则需要对轨迹进行处理:
//选中播放轨迹可见,其余不可见 private void enableSelectedTrack () { string selectedTrackName = agAnimationTrack.Name; IArray tracksArray = agAnimationTracks.AGTracks; int trackCount = tracksArray.Count; if (trackCount>0) { for(int i = 0;i < trackCount;i++) { IAGAnimationTrack track_temp = tracksArray.get_Element(i) as IAGAnimationTrack; if(track_temp.Name==selectedTrackName) { track_temp.IsEnabled = true; } else if (track_temp.Name!=selectedTrackName) { IAGAnimationTrack track2Disabled; agAnimationTracks.FindTrack(track_temp.Name,out track2Disabled); track2Disabled.IsEnabled = false; } } } }
通过以上步骤就可以实现对动画的操作,至此,ArcGlobe组件开发之动画篇就结束了,希望对需要的童鞋有所帮助。
相关文章推荐
- ArcGlobe三维开发之七————动画的两种实现方式
- ArcGlobe组件开发之动画5——播放动画
- ArcGlobe三维开发之六——动画(前言)
- ArcGlobe三维开发之十三——加载保存动画
- ArcGlobe三维开发之八————由指定路径创建动画(接口)
- ArcGlobe三维开发之九————由指定路径创建动画(实现)
- 【iOS-Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!更新解决添加组件Cocos2d动画停止播放的BUG】
- Android游戏开发之游戏帧动画的播放与处理(七)
- 谈谈一些有趣的CSS题目(十四)-- 纯 CSS 方式实现 CSS 动画的暂停与播放!
- 微信小程序开发之录音机 音频播放 动画实例 (真机可用)
- ArcGlobe三维开发之十八——纵断面图的绘制
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/动画播放出现毛边以及禁止游戏中自动锁屏问题!
- 微信小程序开发之录音机 音频播放 动画 (真机可用)
- unity手游开发--如何得到当前物体播放的动画
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/动画播放出现毛边以及禁止游戏中自动锁屏问题!【2011年12月18日补充】
- 【iOS-Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!【11月28日更新解决添加组件Cocos2d动画停止播放的BUG】
- XNA 通过图片播放动画,Windows Phone 游戏开发
- ArcGlobe三维开发之二——IGlobeLayerProperties接口
- ArcGlobe三维开发之十六——加载和保存3dd文件
- 【iOS-Cocos2d游戏开发之十四】音频/音效/视频播放(利用Cocos2D-iPhone-Extensions嵌入Cocos2d进行视频播放!)