• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - Swift 中的 UI 碰撞

[复制链接]
菜鸟教程小白 发表于 2022-12-11 16:34:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我需要使用 Swift 语言在单 View 应用程序中制作一个 Breakout 应用程序。但是,我无法让“球”对击中障碍使用react。此外,我无法让障碍物在被击中后消失。有没有人对此有解决方案,或者有没有人有我可以查看的示例应用程序?这是在单 View 应用程序中,而不是 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)    
}



Best Answer-推荐答案


如果您希望它们发生碰撞,您需要在 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];

现在如果你想捕获碰撞你需要添加一个委托(delegate)到collisionDelegate。当发生命中时,该委托(delegate)应该能够响应多种方法,(阅读有关 bjc(pl)UICollisionBehaviorDelegate" rel="noreferrer noopener nofollow">UICollisionBehaviorDelegate 的文档。

关于ios - Swift 中的 UI 碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37465383/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap