iMedre

SKPhysicsJoint Sınıfı Nedir Ve Fonksiyonları Nelerdir ? Sprite Kit Derinlikleri #39

Merhaba bu yazıda Sprite Kit Kütüphanesinden SKPhysicsJoint sınıfının fonksiyonlarını anlatacağım. Keyifli okumalar.

SKPhysicsJoint Nedir?

Fizik bedenlerini birbirine bağlayan nesneler için soyut süper sınıf.

Genel Bakış

Bir SKPhysicsJoint nesnesi, iki fizik gövdesini, fizik dünyası tarafından birlikte simüle edilecek şekilde bağlar. Bu sınıfın nesnelerini hiçbir zaman doğrudan gerçekleştiremezsiniz; bunun yerine, yapmak istediğiniz eklem türünü tanımlayan alt sınıflardan birini başlatırsınız.

Fizik Body’lerini Bağlama

Zaten tarif edilmiş olan fizik sistemlerini kullanan birçok ilginç oyun yapabilmenize rağmen, eklemleri kullanarak fizik bedenlerini birbirine bağlayarak tasarımlarınızı daha da ileriye taşıyabilirsiniz. Sahne fiziği simüle ettiğinde, kuvvetlerin cisimleri nasıl etkilediğini hesaplarken bu eklemleri dikkate alır.

Fizik dünyasını kullanarak eklemleri ekler veya çıkarırsınız. Eklem oluşturduğunuzda, eklemi bağlayan noktalar her zaman sahnenin koordinat sisteminde belirtilir. Bu, önce bir düğüm oluşturmadan önce düğüm koordinatlarından sahne koordinatlarına dönüştürmenizi gerektirebilir.

Oyununuza bir fizik eklemi kullanmak için şu adımları izleyin:

  • İki fizik gövdesi oluşturun.
  • Fizik gövdelerini sahnedeki bir çift SKNode nesnesine takın.
  • Yukarıdaki tabloda listelenen alt sınıflardan birini kullanarak bir ortak nesne oluşturun.
  • Gerekirse, eklemin nasıl çalışması gerektiğini tanımlamak için ortak nesnenin özelliklerini yapılandırın.
  • Sahnenin SKPhysicsWorld nesnesini al.
  • Fizik dünyasının add (_: ) yöntemini çağırın.

Önemli

Fizik ortak başlatıcılarına aktarılan anchor argümanları her zaman ebeveyn sahnesinin koordinat alanındadır. Bir düğümün sahnenin yakın bir çocuğu değilse, sahne koordinatlarındaki bir düğümün konumunu hesaplamak için convert (_: to : ) yöntemini kullanabilirsiniz.

Aşağıdaki kod, bir SKPhysicsJointPin bağlantısı kullanılarak birlikte iki düğüm, pim ve piston içerir. Bu örnekte, düğüm pini, bir bağlanma alt öğesidir. Sahnenin acil bir çocuğu olmadığı için, koordinatları, eklemi başlatmak için sahne koordinatlarına dönüştürülür:

let pinPosition = connectingRod.convert(pin.position,
                                         to: scene)
let pinJoint = SKPhysicsJointPin.joint(withBodyA: pin.physicsBody!,
                                        bodyB: piston.physicsBody!,
                                        anchor: pinPosition)
scene.physicsWorld.add(pinJoint)

Fizik Body’lerini Ayırma

Bir simülasyondan eklemleri kaldırmak için SKPhysicsWorld yöntemini kaldırabilirsiniz remove(_ : ). SKSceneDelegate’in update (_: for : ) yöntemini kullanarak, iki bağlı kuruluş arasındaki mesafe gibi eklemlerin özelliklerini sorgulayabilirsiniz.

Aşağıdaki kod, bunun bir örneğini gösterir. Her yeni yay eklemi oluşturulduğunda, [SKPhysicsJointSpring] türünde yaylar adlı diziye de eklenir. Her bir simülasyon adımında, her bir yay değerlendirilir ve iki bağlı gövde arasındaki mesafe, maxSpringDistance’dan daha büyükse, yay hem fizik dünyasından hem de diziden çıkarılır:

var springs = [SKPhysicsJointSpring]()
let maxSpringDistance: CGFloat = 31

// Each `scene.physicsWorld.add(spring)` is accompanied with `springs.append(spring)`

func update(_ currentTime: TimeInterval, for scene: SKScene) {
    
    for spring in springs {
        if let bodyAPosition = spring.bodyA.node?.position,
            let bodyBPosition = spring.bodyB.node?.position {
            let distance = hypot(bodyAPosition.x  - bodyBPosition.x,
                                 bodyAPosition.y - bodyBPosition.y)
            
            if distance > maxSpringDistance {
                scene.physicsWorld.remove(spring)
                if let index = springs.index(of: spring) {
                    springs.remove(at: index)
                }
            }
        }
    }}

Fonksiyonlar

var bodyA: SKPhysicsBody

Eklemle bağlanan ilk body.

var bodyB: SKPhysicsBody

Eklemle bağlanan ikinci body.

var reactionForce: CGVector
anlık reaksiyon kuvveti  Newton olarak bağlantı noktasında yönlendirilir.
var reactionTorque: CGFloat
Ani tepki momenti anda Newton-metre halinde, bağlantı noktasında yönlendirilir.

Erdem Özgür

Yorum Ekle

Bizleri Sosyal Medyadan Takip Edebilirsiniz

Utanmana gerek yok, bizimle iletişim kurabilirsin. İnsanlarla tanışmayı ve yeni arkadaşlar edinmeyi seviyoruz.