[英]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.