Ping-pong animasyon: çerçeveleri tekrarlamadan döngüle

Kısa geri-ileri animasyonlar (floating icon, breathing pose, panel açılışı) sürekli görünmesi için harika. Ama çerçeve listesini tersine çevirip eklerken dikkat etmen gerekiyor: her iki uç noktası da tekrar ediyor, bu da dönüş noktasında istenmeyen bir duraklamaya neden oluyor.

Mesela 0, 1, 2, 3 çerçevelerin var. Naif yöntemle 0, 1, 2, 3, 3, 2, 1, 0 yaparsın, 3 iki kez görünüyor, 0 döngü sınırında tekrar ediyor. Bunun yerine 0, 1, 2, 3, 2, 1 dizisini kullanırsan, her çerçeve tam bir döngüde bir kez ziyaret edilir. Döngü sona erdiğinde sıradaki çerçeve doğrudan 0 olur, kesintisiz devam eder.

yazıda paylaşılan Python yardımcı fonksiyonu:

1def pingpong(frame_count):
2if (not isinstance(frame_count, int) or isinstance(frame_count, bool)
3or frame_count < 1):
4raise ValueError("frame_count must be a positive integer")
5
6sequence = list(range(frame_count))
7return sequence + sequence[-2:0:-1]

Bu fonksiyon `frame_count` kadar çerçeve için doğru diziyi oluşturuyor. `range(frame_count)` ile 0'dan başlayıp `frame_count - 1`'e kadar giden listeyi alıyor, sonra `sequence[-2:0:-1]` ile sondan bir öncesinden başlayıp 0'a kadar (0 hariç) ters sırada ekliyorsun.

Örnek: 4 çerçeve için `[0, 1, 2, 3, 2, 1]` döndürür. 5 çerçeve için `[0, 1, 2, 3, 4, 3, 2, 1]`, yine her noktayı bir kez ziyaret ediyor.

Animasyon kütüphanelerinde (CSS, Three.js, Flutter) bu yaklaşımı kullanırsan, hareket daha akıcı ve doğal görünür. Özellikle UI animasyonlarında, burada bir duraklamaya hiç yer yok, hareket sürekli akıyor.

konu hakkında tepkinizi verebilirsiniz