2016-02-26 3 views
0

У меня возникли проблемы с реализацией пользовательской анимации на Pebble. Там в самом деле не любой учебник онлайн, чтобы следовать, единственное, что я могу найти официальный Pebble один: https://developer.pebble.com/guides/pebble-apps/display-and-animations/property-animations/#writing-custom-animation-typesPebble: Как создать пользовательскую анимацию?

Это часть кода моего проекта:

static Animation *large_pin_animation; 

static void anim_update_handler(Animation *animation, const AnimationProgress progress) { 
    APP_LOG(APP_LOG_LEVEL_INFO, "%d", (int)progress); 
} 

static void window_load(Window *window) { 
    large_pin_animation = animation_create(); 
    animation_set_duration(large_pin_animation, 1000); 
    animation_set_delay(large_pin_animation, 0); 
    AnimationImplementation anim_implementation = (AnimationImplementation) { 
    .update = anim_update_handler 
    }; 
    animation_set_implementation(large_pin_animation, &anim_implementation); 
} 

Когда я называю animation_schedule(large_pin_animation); сбои приложений, и журналы Pebble не помогают (это говорит о ошибке приложения, поэтому какой-то segfault). Есть что-то, что мне не хватает?

ответ

0

Проблема - это область переменной anim_implementation. Он должен быть объявлен там, где объявлена ​​анимация, иначе после window_load он выходит из области действия и освобождается, поэтому в другой функции, где я пытаюсь запустить анимацию, он не знает, что такое anim_implementation.

Еще одна проблема, с которой я столкнулся, заключалась в том, что для многократного запуска анимации мне пришлось воссоздать анимацию. Итак, в конце я поместил все анимационные материалы в отдельную функцию:

static Animation *large_pin_animation; 
static AnimationImplementation anim_implementation; 

static void anim_update_handler(Animation *animation, const AnimationProgress progress) { 
    APP_LOG(APP_LOG_LEVEL_INFO, "%d", (int)progress); 
} 

static void animate_large_pin() { 
    large_pin_animation = animation_create(); 
    animation_set_duration(large_pin_animation, 1000); 
    animation_set_delay(large_pin_animation, 0); 
    anim_implementation = (AnimationImplementation) { 
    .update = anim_update_handler 
    }; 
    animation_set_implementation(large_pin_animation, &anim_implementation); 
    animation_schedule(large_pin_animation); 
} 
Смежные вопросы