2014-06-27 24 views
6

Sprite kiti ile oynadım ve her zaman adımını işlemek için bir şeyler ayarlamak için güncelleme yöntemini kullandım. Sahne seti ile biraz hızlı öğrenmeye çalışıyorum ve eşdeğerini bulamıyorum.Fizik Simülasyonu için SceneKit Güncelleme Yöntemi

Beni SceneKit için bir güncelleme yöntemi uygulama örneğine işaret edebilir misiniz? Teşekkürler.

cevap

12

(Evet, bu soru hakkında SceneKit değil SpriteKit olduğunu biliyorum, ama bu iki çerçeveler arasındaki benzerlikleri ve farklılıkları dokunur, bu yüzden bu cevabı olanlar ele alacağız.)

SpriteKit olarak Oyun döngü yöntemleri (update, didSimulatePhysics, vb), başlangıçta SKScene sahne sınıfının bir parçasıydı. Bu her zaman en iyi fikir değildir, ancak bir sahne örneğini oyun mantığını uygulamak için bir yerden daha çok veriye benzemek isteyebilirsiniz (özellikle şimdi Xcode 6 grafiksel düzen düzenleyicide tamamen sahneler oluşturulabilir). Yani iOS 8 ve OS X Yosemite'de, bu yöntemler iki yerde. Çerçeve başına oyun mantığı için zaten SKScene alt sınıfını kullanıyorsanız, bunu yapmaya devam edebilirsiniz. Ancak bu kodu başka bir yere koymayı tercih ederseniz, sahnenizde bir temsilci belirleyebilir ve oradaki eşdeğer SKSceneDelegate yöntemlerini uygulayabilirsiniz.

SceneKit'te daha fazla endişe vardır. Bir SCNScene, salt bir veri modeli nesnesi ve sahneyi görüntülemekten sorumlu görünüm (veya başka bir nesne) tarafından yönetilen tüm oluşturma döngüsü işlevselliği olmaya çok daha yakındır. Genellikle bir görüntüyü SCNView'da görüntülersiniz - ancak sahneleri oluşturabilen başka sınıflar da vardır, böylece ortak API'ları SCNSceneRenderer protokolünde bulunur. Görünümünüz için bir temsilci ayarlamak üzere bu protokol tarafından tanımlanan delegate özelliğini kullanın. Temsilcinizde, oluşturma döngüsünün önemli aşamalarına katılmak için SCNSceneRendererDelegate yöntemlerini uygulayabilirsiniz.

SceneKit döngü aşamaları SpriteKit olanlara neredeyse doğrudan gelir: renderer:updateAtTime: olur update:, didEvaluateActions: olur renderer:didApplyAnimationsAtTime: vb (o CoreAnimation tarzı animasyonlar yanı sıra SpriteKit tarzı eylemleri içerdiği için)


Yani , SpriteKit başına çerçeve update yöntemin SceneKit eşdeğeri için şunu yapın:

  1. Set özel nesnelerin bir (diyelim ki, bir görünüm denetleyiciniz), SCNView örneğinizin delegate örneğidir.

  2. konusu özel sınıfta, aşağıdaki yöntemi uygulamak:

    func renderer(_ aRenderer: SCNSceneRenderer!, updateAtTime time: NSTimeInterval) { 
        // per-frame code here 
    } 
    

Veya başına kare mantık eylem veya fizik işlendikten sonra ne gerekiyorsa diğer SCNSceneRendererDelegate yöntemleri için benzer yapmak.

+0

Bunu denedim ... ve henüz tam olarak doğru değil. Sorunun ne olduğunu düşünüyorsun? Kafam çok karışık. Bu herhangi bir alt sınıfı, bir geçersiz kılma yöntemi değil { println ("Merhaba \ n") } –

+2

- düzenlenmiş yanıt bakın kılma fonk oluşturucu (NSTimeInterval _ aRenderer: SCNSceneRenderer !, updateAtTime süresi). – rickster

+0

Sistem zamanını neden burada kullandıklarını merak ediyorum.Saat değiştiğinde bu şeyleri kırmaz mı? –