iMedre

SKPhysicsContact Ve SKPhysicsContactDelegate Sınıfı Nedir Ve Fonksiyonları Nelerdir ? Sprite Kit Derinlikleri #38

Merhaba bu yazıda Sprite Kit Kütüphanesinden SKPhysicsContact  ve SKPhysicsContactDelegate sınıflarını fonksiyonlarını anlatacağım. Keyifli okumalar.

SKPhysicsContact Nedir?

İki fizik kütlesi arasındaki temasın tanımı.

Genel Bakış

Bir fizik dünyasındaki iki fiziksel cisim arasındaki bir bağlantıyı tanımlamak için SpriteKit tarafından otomatik olarak bir SKPhysicsContact nesnesi oluşturulur. İlgili iletiler almak için, ilgilendiğiniz bir SKScene nesnesinin physicsWorld özelliğini okuyun ve ilgili bir nesneye işaret etmek için contactDelegate özelliğini atayın. SKPhysicsContactDelegate protokolünü uygular. Ardından, sahnenizdeki her fizik gövdesi için, hangi etkileşimlerin iletişim mesajları oluşturması gerektiğini tanımlamak için categoryBitMask ve contactTestBitMask özelliklerini ayarlayın.

Fonksiyonları

var bodyA: SKPhysicsBody

Temastaki ilk body.

var bodyB: SKPhysicsBody

Temastaki ikinci body.

var contactPoint: CGPoint

İki fizik kütlesi arasındaki temas noktası, sahne koordinatlarında.

var collisionImpulse: CGFloat

Newton’un saniyesinde bu iki body’nin ne kadar zor olduğunu belirten dürtü.

var contactNormal: CGVector

Çarpışmanın yönünü belirten normal vektör.

SKPhysicsContactDelegate Nedir ?

Uygulamanız, fizik kütlesi temasa geçtiğinde yanıt vermek için uygulayabileceğiniz yöntemlerdir.

Genel Bakış

SKPhysicsContactDelegate protokolünü uygulayan bir nesne, çakışan contactTestBitMask değerlerine sahip iki fizik birimi, fizik dünyasında birbiriyle temas halinde olduğunda yanıt verebilir. Kişi mesajlarını almak için, bir SKPhysicsWorld nesnesinin contactDelegate özelliğini ayarlarsınız. Temas, bir contact başladığında veya bittiğinde çağrılır.

Önemli

Fizik simülasyonu aşamasında fizik teması delege yöntemleri denir. Bu süre zarfında fizik dünyası değiştirilemez ve simülasyondaki fizik kütlesindeki herhangi bir değişimin davranışları tanımlanmamıştır. Bu değişiklikleri yapmanız gerekiyorsa, didBegin (_ : ) veya didEnd (_ : ) içinde bir bayrak ayarlayın ve SKSceneDelegate’deki (_: for : ) yöntemi güncellemesinde bu bayrağa karşılık olarak değişiklikler yapın.

 

Bir temas olayı olduğunda, bir oyuncunun puanını artırmak gibi bir ses çalmak veya oyun mantığını yürütmek için kişi temsilci kullanabilirsiniz. Aşağıdaki kod, isim topuna sahip iki düğüm temas ettiğinde şok dalgası efektinin nasıl görüntüleneceğini gösterir. Kod, çarpışma dürtüsü belirtilen bir eşiğin üzerinde olduğunda yalnızca etki yaratır:

let shockWaveAction: SKAction = {
    let growAndFadeAction = SKAction.group([SKAction.scale(to: 50, duration: 0.5),
                                            SKAction.fadeOut(withDuration: 0.5)])
    
    let sequence = SKAction.sequence([growAndFadeAction,
                                      SKAction.removeFromParent()])
    
    return sequence
}()

func didBegin(_ contact: SKPhysicsContact) {
    if contact.collisionImpulse > 5 &&
        contact.bodyA.node?.name == "ball" &&
        contact.bodyB.node?.name == "ball" {
        
        let shockwave = SKShapeNode(circleOfRadius: 1)

        shockwave.position = contact.contactPoint
        scene.addChild(shockwave)
        
        shockwave.run(shockWaveAction)
    }
}

Fonksiyonlar

func didBegin(SKPhysicsContact)

İki vücut birbiriyle ilk temas ettiğinde çağrılır.

func didEnd(SKPhysicsContact)

Temas iki fizik gövdesi arasında bittiğinde çağrılır.

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.