0

我正在嘗試在Xcode中使用Spritekit而不使用Spritekit。我使用UIVeiws作爲球和槳。爲了移動槳,我在故事板中使用了一個平移手勢識別器並將其連接到UIView。使用Swift將衝突添加到具有pangesture的UIView

我想添加一個碰撞到槳,但我需要它與槳一起移動。現在,使用addBoundaryWithIdentifier,它只在槳葉在原點時才起作用。

幫助幫助!這裏是我到目前爲止的代碼...

類的ViewController:UIViewController中,UICollisionBehaviorDelegate {

var animator = UIDynamicAnimator() 
var collision: UICollisionBehavior! 
var paddleOneOriginalCenter: CGPoint! 

@IBOutlet weak var ball: UIImageView! 
@IBOutlet weak var paddleOne: UIView! 

@IBAction func panGesturePaddleOne(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(view) 
    if sender.state == UIGestureRecognizerState.Began { 
     paddleOneOriginalCenter = paddleOne.center 
    } 
    paddleOne.center.y = paddleOneOriginalCenter.y + translation.y 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Set up ball Dynamic Behaviors 
    self.animator = UIDynamicAnimator(referenceView: self.view) 

    // Ball Collisions 
    collision = UICollisionBehavior(items: [ball]) 
    collision.addBoundaryWithIdentifier("paddleOne", forPath: UIBezierPath(rect: paddleOne.frame)) 

    collision.setTranslatesReferenceBoundsIntoBoundaryWithInsets(UIEdgeInsets(top: 10, left: 1000, bottom: 10, right: 1000)) 
    animator.addBehavior(collision) 

    // Ball Initial Velocity (Puhs) 
    var pushBehavior: UIPushBehavior = UIPushBehavior(items:[ball], mode: UIPushBehaviorMode.Instantaneous) 
    pushBehavior.pushDirection = getRandomDirection() 
    pushBehavior.magnitude = 1 
    animator.addBehavior(pushBehavior) 

    // Ball Bounce 
    let bounceBehaviour = UIDynamicItemBehavior(items: [ball]) 
    bounceBehaviour.elasticity = 1.1 
    animator.addBehavior(bounceBehaviour) 
} 

func getRandomDirection() -> CGVector { 
    let x = CGFloat(arc4random()) 
    let y = CGFloat(arc4random()) 
    return CGVectorMake(x, y) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

}

回答

0

我通過使槳非常,非常沉重,以抵消與球碰撞處理情況。這可能不是最漂亮的解決方案,但它的工作原理!

@IBAction func panGesturePaddleOne(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(view) 
    if sender.state == UIGestureRecognizerState.Began { 
     paddleOneOriginalCenter = paddleOne.center 
    } 
    paddleOne.center.y = paddleOneOriginalCenter.y + translation.y 
    self.animator.updateItemUsingCurrentState(paddleOne) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Set up ball Dynamic Behaviors 
    self.animator = UIDynamicAnimator(referenceView: self.view) 


    //Make paddle heavy 
    let paddleDynamicProperties = UIDynamicItemBehavior(items: [paddleOne, paddleTwo]) 
    paddleDynamicProperties.density = 10000000 
    paddleDynamicProperties.allowsRotation = false 
    animator.addBehavior(paddleDynamicProperties) 

    // Ball Collisions 
    collision = UICollisionBehavior(items: [ball, paddleOne, paddleTwo]) 
    collision.setTranslatesReferenceBoundsIntoBoundaryWithInsets(UIEdgeInsets(top: 10, left: 1000, bottom: 10, right: 1000)) 
    animator.addBehavior(collision) 
    self.collision.addBoundaryWithIdentifier("left", fromPoint: CGPointMake(0, 0), toPoint: CGPointMake(0, self.view.frame.size.height)) 
    self.collision.addBoundaryWithIdentifier("right", fromPoint: CGPointMake(self.view.frame.size.width, 0), toPoint: CGPointMake(self.view.frame.size.width, self.view.frame.size.height)) 

    collision.collisionDelegate = self 

    // Ball Initial Velocity (Push) 
    pushBall() 

    // Ball Bounce 
    let bounceBehaviour = UIDynamicItemBehavior(items: [ball]) 
    bounceBehaviour.elasticity = 1.0 
    bounceBehaviour.friction = 0 
    bounceBehaviour.resistance = 0 
    animator.addBehavior(bounceBehaviour) 
} 
相關問題