找回密码
 立即注册
查看: 3429|回复: 0

在泰泽/Tizen本机应用程序中的动画

[复制链接]
发表于 2015-7-19 00:52:45 | 显示全部楼层 |阅读模式

在泰泽Tizen本机应用程序中的动画

简介
本文将演示泰泽/Tizen本机应用程序中如何使用动画。 这篇文章的目的是提出了开发泰泽/Tizen GUI 本机应用程序所提供的可能性。 我们想把主题放在一个简洁的方式和使用大量的示例代码。 读这篇文章可以后所获得的知识用于游戏开发,以及在用户界面中执行有趣的效果。

这篇文章是针对那些有基本的了解,C 编程语言的开发人员创建的。 阅读这篇文章的开发人员应该有关于泰泽/Tizen本机应用程序生命周期的基本知识。 然而,它是不必要的知识来理解这里展示的范例。

在附加到这篇文章的示例应用程序,您可以看到使用所描述的方法进行的动画。 使用各种各样的缓动函数来修改动画物体的运动进行动画。

执行
有很多机会结识动画泰本机应用程序中。 所有的方式来实现动画,在这篇文章介绍了基于执行动画步骤里面的回调函数。 在很多游戏中,使用从加速度计或陀螺仪的传感器的读数进行控制。 以下文章中介绍了这种方法。 你要记住回调应该用适当的频率调用或调用之间动画应该平稳的。 若要创建平滑动画可以使用称为 Ecore 动画的 EFL 库子集。 在本文稍后部分,您将学习有关它的详细信息。 一个好的做法是使用三角洲定时技术以消除速度显示动画,与当前的帧速率的变化相关联的波动。 这一点尤其重要,如果我们想要获得高精度的运动在我们的动画。

另一种方式进行动画处理的对象是时间的设置一个计时器,在指定间隔将触发动画更新功能。 它可能是一个好的解决方案,在种情况下,我们想要比当前的帧速率要慢的动画的地方。 这种类型的动画可以有用,当你想要在你的游戏使例如雪碧动画。 下面的代码演示如何注册回调:
  1. <font size="4">  #define INTERVAL_IN_SECONDS 0.5

  2.      /* callback function */
  3.     static Eina_Bool
  4.     cb_function(void *data)
  5.     {
  6.         /* do the animation step */
  7.    
  8.         return ECORE_CALLBACK_RENEW;
  9.     }

  10.     […]

  11.     /* register the timer */
  12.     ecore_timer_add(INTERVAL_IN_SECONDS, cb_function, data);</font>
复制代码
无限调用动画回调函数必须返回 ECORE_CALLBACK_RENEW。 您还可以取消该动画在任何时候通过返回值 ECORE_CALLBACK_CANCEL。

英语图书馆,其中基于 GUI 泰本机应用程序,包含称为 Ecore 动画师,开发以创建动画的一个子集。 有了这个工具,您可以创建一个回调将调用每次当您的程序将呈现一个框架。 下面的代码演示如何注册 Ecore 动画回调:
  1. <font size="4">  /* callback function */
  2.     static Eina_Bool
  3.     cb_function(void *data)
  4.     {
  5.         /* do the animation step */
  6.    
  7.         return ECORE_CALLBACK_RENEW;
  8.     }

  9.     […]

  10.     /* register the callback */
  11.     ecore_animator_add(cb_function, data);</font>
复制代码
在 ecore_timer 的情况下,可以在任何时候,当一个回调函数返回的值从 ECORE_CALLBACK_CANCEL 停止动画。 Ecore 动画使你能够通过调用 ecore_animator_freeze() 来冻结随时动画。 在那之后,您可以通过调用 ecore_animator_thaw () 继续动画。
  1. <font size="4"> /* register the callback */
  2.     Ecore_Animator *animator = ecore_animator_add(cb_function, data);
  3.    
  4.     […]
  5.    
  6.     /* Stop animation */
  7.     Ecore_animator_freeze(animator);
  8.    
  9.     /* Play animation after freeze */
  10.     Ecore_animator_thaw(animator); </font>
复制代码
也是动画的可能性设置我们的时间。 在这种情况下在回调函数的参数之一,我们收到有关在动画中位置的信息。 接收的值是一个浮点数从 0.0 到 1.0。 本文附带的示例应用程序使用所描述的方法。
  1. <font size="4"> /* animation time in seconds */
  2.     #define ANIM_TIME 1.2
  3.      
  4.     […]

  5.     /* callback function */
  6.     static Eina_Bool
  7.     cb_function (void *data, double position)
  8.     {
  9.             /* do the animation step */

  10.              return EINA_TRUE;
  11.     }

  12.     […]

  13.     /* register the timer */
  14.     ecore_animator_timeline_add(ANIM_TIME, cb_function, data);</font>
复制代码
Ecore 动画还提供了一整套的缓动函数用来映射在动画中,基于 ecore_animator_pos_map() 函数内部的动画对象的位置的位置。 您可以轻松地执行的动画,例如对象加速或反弹。 此主题的详细的说明可以在这里找到。 在示例程序中已实现方式如下:
  1. <font size="4">  /* animation time in seconds */
  2.     #define ANIM_TIME 1.2
  3.    
  4.     […]
  5.    
  6.     int screen_width;
  7.     int screen_height;  
  8.    
  9.     […]
  10.    
  11.     static void
  12.     evas_object_rotate(Evas_Object *object, double degree){
  13.         Evas_Map *m;
  14.         Evas_Coord x, y, w, h;
  15.         m = evas_map_new(4);
  16.         evas_object_geometry_get(object, &x, &y, &w, &h);
  17.         evas_map_util_points_populate_from_object(m, object);
  18.         evas_map_util_rotate(m, degree, x + (w / 2), y + (h / 2));
  19.         evas_object_map_set(object, m);
  20.         evas_object_map_enable_set(object, EINA_TRUE);
  21.     }
  22.    
  23.     […]
  24.    
  25.     /* callback function */
  26.     static Eina_Bool
  27.     _do_animation(void *data, double pos)
  28.     {
  29.          double frame = pos;
  30.          int x, y;
  31.          frame = ecore_animator_pos_map(pos, animation_type, 0.0, 0.0);
  32.          
  33.           /* some mathematical calculations of new X and Y position
  34.           X = …;
  35.           Y = …;
  36.           Double rotation_angle = …;
  37.            */
  38.    
  39.           […]
  40.    
  41.          evas_object_rotate(data, rotation_angle );
  42.    
  43.          evas_object_move(data, x, y);
  44.    
  45.          return EINA_TRUE;
  46.     }

  47.     […]

  48.     /* register the timer */
  49.     ecore_animator_timeline_add(ANIM_TIME, _do_animation, data);</font>
复制代码
此动画更改位置的对象和它的自转。 动画的太空飞船的移动量依据相切轨迹。 根据变量 animation_type 的值,一个不同的位置被映射每次和动画的对象加快、 减慢或移动均匀。

摘要
在这篇文章中,我们提出了如何创建的动画在特定的时间间隔调用步骤。 我们还描述了步骤执行沿呈现使用 ecore_animator 的每个帧的动画。  此外,这篇文章演示如何停止和恢复动画以及如何实施是内置的缓动函数 EFL 图书馆。 如果你想要探索更多的EFL,你应该查阅相关的文档。

文件附件:
animation.zip


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
欢迎来到泰泽网:http://www.tizennet.com/ 泰泽论坛:http://bbs.tizennet.com/ 好没有内涵哦,快到设置中更改这个无聊的签名吧!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|泰泽应用|泰泽论坛|泰泽网|小黑屋|Archiver|手机版|泰泽邮箱|泰泽网 ( 蜀ICP备13024062号-1 )

GMT+8, 2024-3-29 14:29 , Processed in 0.072329 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表