enes@enesapp
Bugün, aşağıdaki animasyon için biraz uğraştım. Bu tarz şeyleri nasıl yaptığımı pek anlatmadığımı fark ettim. Aynısını yapmak isteyenler olur diye detaylıca açıklıyorum.
Temelde fizik motoruyla çalışan, telefonun konumuna göre yer çekimine tepki veren, sürükleyip fırlatabildiğiniz ve patlatabildiğiniz bir chip animasyonu diyebilirim.
Basit görünse de arkasında birkaç farklı sistem var. Yapı olarak dışarıda SwiftUI, içeride SpriteKit kullanıyorum. İkisini SpriteView ile bağladım. Çünkü SwiftUI’ın kendi animasyonları bu tarz fizik işleri için yeterli değil. Çarpışma, momentum vs. tamamen SpriteKit tarafında.
Chip’ler aslında SKSpriteNode ama görüntülerini SwiftUI’dan alıyorum. ImageRenderer ile bir SwiftUI view’ını render edip texture olarak kullanıyorum. Yani o kapsüller aslında SwiftUI’da çiziliyor, sonra SpriteKit’e gidiyor gibi düşünebilirsiniz.
Yer çekimi için CoreMotion kullanıyorum. Telefonu hareket ettirdiğinizde içerisindeki chipler de telefonun konumuna göre sanki yer çekiminden etkileniyorlarmış gibi hareket ediyorlar.
Drag kısmı beklediğimden daha fazla uğraştırdı. Direkt pozisyonu güncelleyince fizik motoru devre dışı kalıyordu. Onun yerine spring joint kullandım. Parmağın olduğu yerde görünmez bir anchor var, chip ona yayla bağlı gibi hareket ediyor. Bırakınca da biriken momentumla fırlıyor.
Patlama davranışı için dokunma ve sürükleme hareketlerini süre bazlı ve hareket mesafesi kontrolü ile ayırdım. Çok hareket etmeden belli bir süre basılı tutulursa patlama efekti ile ilgili chip’ i kaldırıyorum. Bu işlemde de minik bir uzama, patlama ve titreşim efekti uyguladım. Şimdilik içime sindi gibi ama biraz daha değiştirebilirim.
Aslında bu kadar, onun haricinde bazı ufak detaylar var. Mesela seçimi kolaylaştırmak için hit area’yı biraz büyüttüm, collision path’i dinamik ayarladım. Renkler de her view açılışında dinamik olarak oluşturuluyor. (gözleriniz bozulmasın diye çok açık tonları bu hesaplamadan kaldırdım)
Yapması bayaaa uğraştırdı ama keyifliydi