使用skphysicsBody和半径圆来圈入球

San*_*eno 3 ios sprite-kit skspritenode swift

形而上学

    roundbg.physicsBody = SKPhysicsBody(circleOfRadius: round.frame.width/2)
    roundbg.physicsBody?.dynamic = false
Run Code Online (Sandbox Code Playgroud)

试图将球圈入圆圈内(roundbg).问题是,当我使用circleOfRadius作为圆形纹理时,它需要整个圆而不仅仅是边框.我明白为什么circleOfRadius正在这样做,但无法弄清楚如何抓住边界.有任何想法吗?因此理想情况下,当球落下时,它会被困在圆圈内(圆形).

第一款iOS应用程序/游戏,对此非常新.谢谢你的帮助!

rak*_*hbs 6

SKPhysicsBody(circleOfRadius:)创建基于体积的主体.在您的情况下,您需要一个基于边缘的主体用于较大的圆.请尝试以下代码.

let largeCircleRadius : CGFloat = 100
var largeCirclePath = CGPathCreateMutable();
CGPathAddArc(largeCirclePath, nil, 0.0, 0.0, largeCircleRadius, 0.0, CGFloat(2.0 * M_PI), true)

let largeCircle = SKShapeNode(circleOfRadius: 100)
largeCircle.position = CGPointMake(CGRectGetWidth(frame) / 2.0, CGRectGetHeight(frame) / 2.0)
largeCircle.physicsBody = SKPhysicsBody(edgeLoopFromPath: largeCirclePath)
addChild(largeCircle)

let smallCircle = SKShapeNode(circleOfRadius: 10)
smallCircle.position = CGPointMake(CGRectGetWidth(frame) / 2.0, CGRectGetHeight(frame) / 2.0)
smallCircle.physicsBody = SKPhysicsBody(circleOfRadius: 10)
addChild(smallCircle)
Run Code Online (Sandbox Code Playgroud)

在此处阅读有关基于Edge和基于卷的主体的更多信息: https ://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html#//apple_ref/doc/uid/TP40013043-CH6 -SW3

要创建圆的一小部分,您可以相应地更改circlePath的startAngle和endAngle.也可以使用edgeChainFromPathedgeLoopFromPath不是关闭循环.

let largeCircleRadius : CGFloat = 100
var largeCirclePath = CGPathCreateMutable();
let startAngle : CGFloat = 3.14
let endAngle : CGFloat = 2 * 3.14

CGPathAddArc(largeCirclePath, nil, 0.0, 0.0, largeCircleRadius, startAngle, endAngle , false)

let largeCircle = SKShapeNode(path: largeCirclePath)
largeCircle.position = CGPointMake(CGRectGetWidth(frame) / 2.0, CGRectGetHeight(frame) / 2.0)
largeCircle.physicsBody = SKPhysicsBody(edgeChainFromPath: largeCirclePath)
addChild(largeCircle)

let smallCircle = SKShapeNode(circleOfRadius: 10)
smallCircle.position = CGPointMake(CGRectGetWidth(frame) / 2.0, CGRectGetHeight(frame) / 2.0)
smallCircle.physicsBody = SKPhysicsBody(circleOfRadius: 10)
addChild(smallCircle)
Run Code Online (Sandbox Code Playgroud)