如何在 Sprite Kit 中为具有内部结构的 SKSpriteNode 创建物理体 (Swift)
How to create a physics body for an SKSpriteNode with an interior in Sprite Kit (Swift)
我目前正在制作一个 iOS 游戏,其中球必须在下图定义的框架内反弹:
游戏依靠以下方法自动创建物理体并将其分配给游戏周围的框架。
frame.physicsBody = SKPhysicsBody(texture: frameTexture, size: frame.size)
但是,此代码分配了一个包含图像外部而非内部的主体,因此将空白内部视为实体对象。反过来,这意味着球不能在框架内,并且在生成后立即被迫离开屏幕。
有什么方法可以给物理物体一个内部空间吗?
另一个 post 这里:SpriteKit SKPhysicsBody with Inner Edges 旨在做类似的事情,但不涉及自动环绕纹理(因此出现新问题)
您可以使用 init(edgeLoopFrom:) 初始化器来实现内边缘摩擦。您可以使用下面的代码:
override func didMove(to view: SKView) {
//Setup scene's physics body (setup the walls)
physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
let back = SKSpriteNode(imageNamed: "1")
back.position = CGPoint(x: frame.midX, y: frame.midY)
back.size = CGSize(width: 500, height: 600)
back.zPosition = -3
let rect = CGRect(origin: CGPoint(x: -back.size.width/2, y: -back.size.height/2), size: back.size)
back.physicsBody = SKPhysicsBody(edgeLoopFrom: rect)
addChild(back)
//Add Red ball "inside" the back sprite
let red = SKShapeNode(circleOfRadius: 20)
red.fillColor = .red
red.strokeColor = .clear
red.position = back.position
red.physicsBody = SKPhysicsBody(circleOfRadius: 20)
red.physicsBody?.restitution = 1
red.physicsBody?.friction = 0
red.zPosition = 1
red.physicsBody?.affectedByGravity = false
addChild(red)
red.physicsBody?.applyImpulse(CGVector(dx: 20, dy: 15))
}
请按照此 并查看下面给出的答案。
我正在提供我的项目的屏幕截图
我目前正在制作一个 iOS 游戏,其中球必须在下图定义的框架内反弹:
游戏依靠以下方法自动创建物理体并将其分配给游戏周围的框架。
frame.physicsBody = SKPhysicsBody(texture: frameTexture, size: frame.size)
但是,此代码分配了一个包含图像外部而非内部的主体,因此将空白内部视为实体对象。反过来,这意味着球不能在框架内,并且在生成后立即被迫离开屏幕。
有什么方法可以给物理物体一个内部空间吗?
另一个 post 这里:SpriteKit SKPhysicsBody with Inner Edges 旨在做类似的事情,但不涉及自动环绕纹理(因此出现新问题)
您可以使用 init(edgeLoopFrom:) 初始化器来实现内边缘摩擦。您可以使用下面的代码:
override func didMove(to view: SKView) {
//Setup scene's physics body (setup the walls)
physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
let back = SKSpriteNode(imageNamed: "1")
back.position = CGPoint(x: frame.midX, y: frame.midY)
back.size = CGSize(width: 500, height: 600)
back.zPosition = -3
let rect = CGRect(origin: CGPoint(x: -back.size.width/2, y: -back.size.height/2), size: back.size)
back.physicsBody = SKPhysicsBody(edgeLoopFrom: rect)
addChild(back)
//Add Red ball "inside" the back sprite
let red = SKShapeNode(circleOfRadius: 20)
red.fillColor = .red
red.strokeColor = .clear
red.position = back.position
red.physicsBody = SKPhysicsBody(circleOfRadius: 20)
red.physicsBody?.restitution = 1
red.physicsBody?.friction = 0
red.zPosition = 1
red.physicsBody?.affectedByGravity = false
addChild(red)
red.physicsBody?.applyImpulse(CGVector(dx: 20, dy: 15))
}
请按照此
我正在提供我的项目的屏幕截图