我开始研究iOS中的Sprite Kit游戏,我想知道如何在球进入篮圈时检测是否发生碰撞。
让事情更容易理解。我的篮筐上有两个角(它们是红色的,很容易看到,它们脱颖而出),它们碰撞着它们,如果球碰到它们,它就会被扯掉。
我的问题:当球击中任何一个角落或者如果球进入篮筐而没有击中任何一个角落时我想要注意到。 (就像一种得分区分正常投掷和完美投掷的方式)
更新:
如何在角落设置旗帜?你能指出我需要使用的功能吗?
我有一个节点通知我,如果球进入篮筐,它是篮筐中间的钢筋,当它碰撞时,它会增加我的分数。
func didBegin(_ contact: SKPhysicsContact)
{
// check for the ball contacting the scoreZone (scoreZone is the steel bar)
guard let ballBody = ball.physicsBody, let scoreBody = score_zone.physicsBody else {
return
}
// it doesn't matter who touches who, so just use array "contains" to handle both cases
let bodies = [contact.bodyA, contact.bodyB]
if bodies.contains(ballBody) && bodies.contains(scoreBody) && should_detect_score {
// add score
add_score()
}
}
答案 0 :(得分:2)
答案 1 :(得分:1)
这里有一些应用和检测碰撞的代码,我使用它并且看起来非常有效
-SWIFT 3 -
enum bodyType: UIInt32 {
case redDot1 = 1
case redDot2 = 2
case ball = 3
}
//do this to properly set up the physicsBodies of your detection otherwise the detection will not work at all
yourBall.physicsBody = SKPhysicsBody(circleOfRadius: CGFloat(x: ball.size.width, y: ball.size.height)
yourBall.physicsBody?.categoryBitMask = bodyType.ball.rawValue
yourBall.physicsBody?.collisionBitMask = bodyType.redDot1.rawValue | bodyType.redDot2.rawValue
//repeat these steps for redDot1 and redDot2 and then put this in someplace (doesn't matter where)
func didBegin(_ contact: SKPhysicsContact) {
if contact.bodyA.categoryBitMask = bodyType.ball.rawValue && contact.bodyB.categoryBitMask = bodyType.redDot1.rawValue || contact.bodyB.categoryBitMask = bodyType.ball.rawValue && contact.bodyA.categoryBitMask = bodyType.redDot1.rawValue {
//in here is where you will put the notification
}
if contact.bodyA.categoryBitMask = bodyType.ball.rawValue && contact.bodyB.categoryBitMask = bodyType.redDot2.rawValue || contact.bodyB.categoryBitMask = bodyType.ball.rawValue && contact.bodyA.categoryBitMask = bodyType.redDot2.rawValue {
//in here is where you will put the notification
}
}
一些解释
所以,如果你看看我宣称你的球有物理身体的地方,那就说categoryBitMask = BlahBlah意味着你告诉代码你的球有一个独特的整数,区别于它的碰撞检测
然后它说的是collisionBitMask,这意味着你告诉SpriteKit正是你希望那个球与之联系的
并且在底部,该函数是它可以创建的物理处理程序,因此您可以准确地确定联系人的内容和发生的时间,并允许您输入在调用联系人时发生的事情(例如提供一个单挑)
我建议你阅读更多关于它的内容并研究关于SKPhysicsBodies的苹果文档
如果您有任何其他问题,请告诉我,因为我很乐意帮助您解决这些问题
和史蒂夫·伊夫斯刚刚发布了你想要做的四件事制作某种形式的整数,如果触及红点,则会添加该整数
如果整数> 0然后它不是一个完美的投掷
如果整数= 0则完美抛出
添加分数后重置整数并重新执行