簡體   English   中英

Swift中的UICollisions

[英]UICollisions in Swift

我需要使用Swift語言在單視圖應用程序中制作Breakout應用程序。 但是,我很難讓“球”對擊中障礙做出反應。 此外,在遇到障礙后,我很難讓障礙消失。 有沒有人對此有解決方案,或者有沒有值得我關注的示例應用程序? 這是在單視圖應用程序中,而不是Sprite中。

var dynamicAnimatior = UIDynamicAnimator()

override func viewDidLoad() {
    super.viewDidLoad()
    dynamicAnimatior = UIDynamicAnimator(referenceView: view)
    setupViews()
}

func setupViews() {

    let blueSquare = UIView(frame: CGRectMake(100, 100, 50, 50))
    blueSquare.backgroundColor = UIColor.blueColor()
    view.addSubview(blueSquare)

    let barrier = UIView(frame: CGRect(x: 0, y: 300, width: 130, height: 20))
    barrier.backgroundColor = UIColor.redColor()
    view.addSubview(barrier)

    addDynamicBehaviors([blueSquare])
}

func addDynamicBehaviors(array: [UIView]) {

    let dynamicItemBehavior = UIDynamicItemBehavior(items: array)
    dynamicItemBehavior.density = 1.0
    dynamicItemBehavior.friction = 0.0
    dynamicItemBehavior.resistance = 0.0
    dynamicItemBehavior.elasticity = 1.0
    dynamicAnimatior.addBehavior(dynamicItemBehavior)

    let pushBehavior = UIPushBehavior(items: array, mode: .Instantaneous)
    pushBehavior.magnitude = 1.0
    pushBehavior.pushDirection = CGVectorMake(0.5, 0.5)
    dynamicAnimatior.addBehavior(pushBehavior)

    let collisionBehavior = UICollisionBehavior(items: array)
    collisionBehavior.translatesReferenceBoundsIntoBoundary = true
    collisionBehavior.collisionMode = .Everything
    collisionBehavior.collisionDelegate = self

    dynamicAnimatior.addBehavior(collisionBehavior)    
}

如果要使兩個對象碰撞,則需要在UICollisionBehavior都包含兩個對象。 根據您的需要,有幾種可能性。 我想您需要球在障礙物上反彈,因此請創建以下行為:

let collisionBehavior = UICollisionBehavior(blueSquare: array)

然后添加與您的障礙相對應的剛性邊界:

let edge = CGPointMake(barrier.frame.origin.x + barrier.frame.size.width,
                       barrier.frame.origin.y + barrier.frame.size.heigth);
collisionBehavior.addBoundaryWithIdentifier("barrier",
                                            fromPoint:barrier.frame.origin,
                                            toPoint:rightEdge];

現在,如果您想捕獲碰撞,則需要將一個委托添加到collisionDelegate 發生點擊時,該委托人應該能夠響應多種方法(請閱讀有關UICollisionBehaviorDelegate的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM