SGDK. Управляем скоростью анимации.

Что потребуется.

Чтобы управлять скоростью анимации, нам потребуется:

  • Переменная Sprite->timer, которая хранит время до переключения на следующий кадр.
  • Функция SPR_setFrameChangeCallback, которая вызывается в момент смены кадра.

Т.е. в момент смены кадра, мы будем менять переменную timer, в зависимости от условий.

Теперь, скачайте SGDK проект с github.

Задаем скорость каждой анимации.

В функции main, передаем спрайт и callBack функцию playerFrameChanged в SPR_setFrameChangeCallback

Callback функция — это функция которая передается в другую функцию.

SPR_setFrameChangeCallback(playerBody.sprite, playerFrameChanged);

Чуть выше, я создал функцию playerFrameChanged, в которой будет находится логика смены кадра.

static void playerFrameChanged(Sprite* sprite){
	switch(sprite->animInd){
		case 2: case 3: case 4:
			sprite->timer = 1;
			break;
		default:
			sprite->timer = 5;
			break;
	}
	
}

Разберем код:

  • Если выбрана анимация с индексом 2,3,4 ставим быструю скорость проигрывания sprite->timer = 1
  • В остальных случаях, медленную sprite->timer = 5

Управляем скоростью отдельных кадров.

Во втором примере я создал массив, в котором задается длительность каждого кадра анимации.

const u8 const playerAnim3_timeArr[] = {30, 5, 5, 30, 15, 30};

И в callBack функции:

static void playerFrameChanged2(Sprite* sprite){
	switch(sprite->animInd){
    	case 2:
      		sprite->timer = playerAnim3_timeArr[sprite->frameInd];
      		break;
  	}
	
}

Т.е. в зависимости от номера кадра sprite->frameInd, получаем соответствующую длительность playerAnim3_timeArr[sprite->frameInd], и присваиваем к длительности текущего кадра sprite->timer.

Заключение

Таким образом вы можете задавать длительность любого кадра анимации. Если есть вопросы, пишите их в комментариях.

Итоговый результат.

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!