[英]How to attach sprites that collide?
我本質上希望“小精靈”在粘在一起時發生碰撞。 但是,我不希望“關節”過於僵化。 我本質上希望小精靈只要彼此接觸就能夠移動。 想象一下,如果連接了兩個圓圈,則可以在另一個圓圈周圍移動,只要它保持接觸即可。
我發現了一個問題: 如何在SpriteKit中使一個物體粘附到另一個運動對象上 ,還有許多其他資源說明了如何使Sprite在碰撞時粘附,但是它們都使用SKJoints,而這些剛性的關節並不是真正靈活的。
我想用另一種方式來表達這句話是說我想讓精靈貼住,但是我希望它們能夠彼此“滑動”。
好吧,我可以想到一種解決方法,但這不適用於非常規多邊形。
堅持(例如雙關語)您的圈子示例,如果鎖定圈子的位置該怎么辦?
let circle1 = center circle
let circle2 = movable circle
知道兩個圓的寬度后,您可以在update函數中放置該位置,該位置應恰好是以下位置的距離:
((circle1.frame.width / 2) + (circle2.frame.width / 2))
如果您願意,這里有一些代碼可以幫助您。
override func update(currentTime: CFTimeInterval) {
{
let distance = hypotf(Float(circle1.position.x - circle2.position.x), Float(circle1.position.y - circle2.position.y))
//calculate circle distances from each other
let radius = ((circle1.frame.width / 2) + (circle2.frame.width / 2))
//distance of circle positions
if distance != radius
{
//if distance is less or more than radius
let pointA = circle1.position
let pointB = circle2.position
let pointC = CGPointMake(pointB.x + 2, pointB.y)
let angle_ab = atan2(pointA.y - pointB.y, pointA.x - pointB.x)
let angle_cb = atan2(pointC.y - pointB.y, pointC.x - pointB.x)
let angle_abc = angle_ab - angle_cb
//get angle of circles from each other using atan2
let vectorx = cos(angle_abc)
let vectory = sin(angle_abc)
//convert angle into vectors
let x = circle1.position.x + radius * vectorx
let y = circle1.position.y + radius * vectory
//get new coordinates from vector, radius and center circle position
circle2.position = CGPointMake(x, y)
//set new position
}
}
好吧,您需要編寫代碼以確保可移動的圓可移動。 但是,這應該工作。
我還沒有對此進行測試,並且我什至還沒有學過幾何,更不用說在學校里了。
如果我按預期閱讀了您的問題,您仍然可以使用關節-只需創建具有反向運動約束的動作即可允許圍繞接觸圓的關節旋轉和平移。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.