互芯平台播放动画完毕后多播一帧的问题修改

修改次void mmi_pwron_entry_animation_screen(void)下的一项值的大小

/* not set in NVRAM, use defulat 20 sec limit */
if(force_stop_time == 0xffff)
{
force_stop_time = 5*1000;//20000;//改到动画长度就可以了
}
还看到以下代码
static void mmi_pwron_froce_terminate_display(void)
{
   /*----------------------------------------------------------------*/
   /* Code Body                                                      */
   /*----------------------------------------------------------------*/


MMI_TRACE((MMI_TRACE_G7_MISC, MMI_POWER_ON_ANIMATION_TIMEOUT));
mmi_trace(1," mmi_pwron_froce_terminate_display");
/* if never successfully play once, force stop */
if(!g_pwron_is_successful_play)
{
g_pwron_is_terminate_diplay = TRUE;
g_pwron_is_successful_play = TRUE;


/* mimic gif last frame callback */
CallBackPowerOnAnimationComplete(GDI_GIF_LAST_FRAME);//播放失败就放最后一帧


/* start another timer to try */
coolsand_UI_start_timer(200, mmi_pwron_froce_terminate_display);
}
}

论坛朋友介绍了一个不用改这里面数值的方法,如下

尝试如下修改:
RedrawCategory166Screen函数:
...
        /* source from id */
        if (cat166_is_gif_anim)
        {
            /* animation, use GDI's auto play animation */
            gdi_image_set_animation_last_frame_callback(cat166_animation_complete_callback);
            TRACE_SYS_FUNCTION();
            result = gdi_image_draw_animation_once(cat166_image_offset_x, cat166_image_offset_y, (U8*) GetImage(cat166_animation_id), NULL); //gdi_image_draw_animation
...

BV4的工程还需要在mmi_pwron_show_image_callback函数增加(bv5的工程可以不增加):
        else
        {
                /* play finish successfully */
                g_pwron_is_successful_play = TRUE;

                /* call before access NVRAM */
                CallBackPowerOnAnimationComplete(GDI_SUCCEED);

                g_pwr_context[0].PowerOnAnimationComplete = 1;        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要读取Unity中Animation组件的最后一帧的坐标,可以使用以下步骤: 1. 首先,确保你的动画片段(Animation Clip)已经添加到动画控制器(Animation Controller)中,并且你的角色或对象上有一个Animation组件。 2. 创建一个脚本并将其附加到你希望读取动画最后一帧坐标的对象上。 3. 在脚本中,使用Animation组件来获取动画的最后一帧的坐标。以下是一个示例代码: ```csharp using UnityEngine; public class ReadLastFramePosition : MonoBehaviour { public Animation animation; public string animationClipName; private void Start() { // 播放动画 animation.Play(animationClipName); } private void Update() { // 如果动画已经播放完毕 if (!animation.isPlaying) { // 获取最后一帧的位置 Transform[] bones = animation.GetComponentsInChildren<Transform>(); Vector3 lastFramePosition = Vector3.zero; foreach (Transform bone in bones) { if (animation[animationClipName].GetCurveCount(bone.name) > 0) { AnimationCurve curve = animation.GetCurve(bone.name, typeof(Transform), "localPosition.x"); if (curve != null) { lastFramePosition = bone.localPosition; } } } // 使用最后一帧的位置进行后续的操作 Debug.Log("Last Frame Position: " + lastFramePosition); } } } ``` 在以上代码中,我们首先播放动画,然后在Update函数中检查动画是否已经播放完毕。如果是,则遍历动画中的每个骨骼(bone),通过获取曲线(curve)并检查其是否为空来确定是否有位置曲线。如果有位置曲线,则获取最后一帧的位置,并进行后续的操作。 请注意,这种方法假设动画中只有一个位置曲线。如果你的动画包含多个骨骼或多个位置曲线,请根据你的需求进行修改

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值