Merhaba bu yazıda Sprite Kit Kütüphanesinden SKConstraint sınıfını anlatacağım. Keyifli okumalar.
SKConstraint Nedir?
Bir düğümün konumunu veya rotasyonunu sınırlamak için bir şartname.
Genel Bakış
Bir SKConstraint nesnesi, düğümün konumuna veya yönüne ilişkin matematiksel bir kısıtlama tanımlar. Kısıtlamalar düğümlere eklenir; Bir sahne, herhangi bir eylemi ve fizik etkileşimini işledikten sonra, düğüm ağacındaki düğümlere eklenmiş kısıtlamaları uygular. Bir sahne oluşturulmadan önce belirli ilişkilerin doğru olduğundan emin olmak için kısıtlamalar kullanın. Örneğin, aşağıdakileri yapmak için bir kısıtlama kullanabilirsiniz:
- Bir düğümün zRotation özelliğini, her zaman başka bir düğüme veya sahnedeki bir konuma yönlendirecek şekilde değiştirin.
- Bir düğümü, başka bir düğüme veya sahnede bir noktaya belirli bir mesafe içinde tutun.
- Belirtilen bir dikdörtgenin içine bir düğüm tutun.
- Bir düğümün zRotation özelliğini kısıtlayın, böylece daha sınırlı bir döndürme hareket aralığına sahip olur.
Kısıtlamaları kullanmak için, bir veya daha fazla kısıtlama nesnesi içeren bir NSArray nesnesi oluşturun ve diziyi düğümün kısıtlama özelliğine atayın. Sahne değerlendirildiğinde, bir düğüm üzerindeki kısıtlamalar kısıtlama dizisinde göründükleri sırayla yürütülür.
Bir kez oluşturulduğunda, bir sınırlama değiştirilemez. Bununla birlikte, etkinleştirilmiş özelliğini ayarlayarak bir kısıtlamayı seçici olarak devre dışı bırakabilir veya etkinleştirebilirsiniz. Kısıtlama uygulanmadan önce başvurulan referans koordinat sistemine dönüştürmek için referenceNode özelliğini de kullanabilirsiniz.
Fonksiyonlar
Konum Kısıtlamaları Yaratmak
Konum kısıtlamaları, düğümleri yerine kilitlenmelerini (position X (_: y:)) kısıtlamanıza izin verir, yalnızca dikey olarak hareket edebilir (positionX (_ :)) veya yalnızca yatay olarak hareket edebilir (positionY (_: )).
Liste 1, gürültü alanından etkilenen bağlı bir fizik gövdesine sahip bir düğümü nasıl oluşturabileceğinizi gösterir. Düğüm gürültü ile hareket eder, ancak hem yatay hem de dikey eksenlerde 300 ila 340 nokta arasında dikdörtgen bir bölgeyle sınırlandırılır.
scene.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
let noiseField = SKFieldNode.noiseField(withSmoothness: 1, animationSpeed: 0.1)
scene.addChild(noiseField)
let node = SKShapeNode(circleOfRadius: 10)
node.physicsBody = SKPhysicsBody(circleOfRadius: 10)
scene.addChild(node)
let range = SKRange(lowerLimit: 300, upperLimit: 340)
let lockToCenter = SKConstraint.positionX(range, y: range)
node.constraints = [ lockToCenter ]
class func position
Bir düğümün konumunun x koordinatını kısıtlayan bir kısıtlama oluşturur.
class func position
Bir düğümün konumunun y koordinatını kısıtlayan bir kısıtlama oluşturur.
class func position
Bir düğümün konumunun her iki koordinatını kısıtlayan bir kısıtlama oluşturur.
Oryantasyon Kısıtlamaları Oluşturma
Yönlendirme kısıtlamaları için yaygın bir kullanım, bir bakış kısıtlaması yapmaktır. Örneğin, bir çift gözü hareketli bir nesneyi takip etmek veya hedefin yönünde bir roket noktası yapmak için bir bakış kısıtlaması yaratabilirsiniz.
Liste 2, işaretçi olarak adlandırılan bir nokta düğümü oluşturmak için bir kısıtlamanın nasıl oluşturulacağını gösterir; her zaman hedef adında bir dairesel şekil düğümüne doğru işaret eder. İşaretçiye atanan doku yukarı doğru bir işaretleme okudur ve SpriteKit’in açısal koordinatları orijini saat 3 konumundayken, yön kısıtının 90 ° (pi / 2 radyan) ofseti vardır, böylece ok doğru yönde yönlendirilir hedef.
let target = SKShapeNode(circleOfRadius: 10)
target.position = CGPoint(x: 100, y: 100)
scene.addChild(target)
let pointer = SKSpriteNode(imageNamed: "arrowUp.png")
pointer.position = CGPoint(x: 200, y: 200)
scene.addChild(pointer)
let lookAtConstraint = SKConstraint.orient(to: target,
offset: SKRange(constantValue: -CGFloat.pi / 2))
pointer.constraints = [ lookAtConstraint ]
let limitLookAt = SKConstraint.zRotation(SKRange(lowerLimit: -CGFloat.pi / 2,
upperLimit: CGFloat.pi / 2))
pointer.constraints = [ lookAtConstraint, limitLookAt ]
class func orient(to: SKNode, offset: SKRange)
class func orient(to: CGPoint, offset: SKRange)
class func orient(to: CGPoint, in: SKNode, offset: SKRange)
class func z Rotation(SKRange)
Mesafe Kısıtlamaları Yaratmak
Uzaklık kısıtlamaları, bir düğümü, başka bir düğümün veya bir noktanın belirli bir mesafe aralığına sınırlandırır ve düğüm, itici alanlar ve yollar etrafında böyle bir simüle edici akın etkisi için kullanılabilir. Alt limite, üst limite veya her ikisine birden sahip olan bir menzile sahip bir mesafe kısıtlaması sağlamak çok farklı davranışlarla sonuçlanır:
class func distance(SKRange, to:
Bir düğümü başka bir düğüme belirli bir mesafede tutan bir kısıtlama oluşturur.
class func distance(SKRange, to:
Bir noktayı belirli bir noktaya kadar tutan bir kısıtlama oluşturur.
class func distance(SKRange, to:
Bir düğümü, başka bir düğümün koordinat sisteminde belirli bir noktaya kadar tutan bir kısıtlama oluşturur.
Bir Kısıtlamanın Uygulandığı Koordinat Sisteminin Belirlenmesi
var reference
Sınırı uygulamak için koordinat sistemi kullanılmalıdır.
Yorum Ekle