swift - SKPhysicsContactDelegate,碰撞无法正常工作
问题描述
我想知道如何让联系人代表工作。我确实有接触,但我希望单个砖块在被球击中时消失。
我已经用这个打了一堵砖墙太久了。一个又一个的教程似乎没有让我到任何地方。我可能需要采取婴儿步骤,但我不确定如何开始。
我在 Youtube 上尝试了很多教程,以及我可以在网上找到的任何教程。
enum CollisionType: UInt32 {
case ball = 1
case paddle = 2
case walls = 4
case brick = 8
}
class Brick: SKSpriteNode { }
class GameScene: SKScene, SKPhysicsContactDelegate {
let bricks = ["brickPurple","brickGreen", "brickRed"]
let brick = SKSpriteNode(imageNamed: "brickPurple")
let ball = SKSpriteNode(imageNamed: "ball")
let paddle = SKSpriteNode(imageNamed: "paddle")
override func didMove(to view: SKView) {
physicsWorld.contactDelegate = self
physicsBody = SKPhysicsBody(edgeLoopFrom: frame.inset(by: UIEdgeInsets(top: 0, left: 0 , bottom: 0 , right: 0 )))
ball.name = "ball"
ball.size = CGSize(width: 20, height: 20)
ball.position.x = frame.maxX/2
ball.position.y = 70
addChild(ball)
ball.physicsBody = SKPhysicsBody (circleOfRadius: ball.size.width/2)
ball.physicsBody?.restitution = 1
ball.physicsBody?.linearDamping = 0
ball.physicsBody?.friction = 0
ball.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 20))
ball.physicsBody?.contactTestBitMask = ball.physicsBody!.collisionBitMask
paddle.name = "paddle"
paddle.size = CGSize(width: 100, height: 20)
paddle.position.x = frame.maxX/2
paddle.position.y = 50
paddle.physicsBody = SKPhysicsBody(rectangleOf: paddle.size)
paddle.physicsBody?.isDynamic = false
let brickWidth = brick.frame.width
let brickHeight = brick.frame.height
for i in stride(from: view.bounds.minX + brickWidth, to: view.bounds.maxX - brickWidth, by: brickWidth ) {
for j in stride(from: view.bounds.minX + brickHeight + 375, to: view.bounds.maxX + 200, by: brick.frame.height + 0) {
let brickType = bricks.randomElement()!
let brick = Brick(imageNamed: brickType)
brick.position = CGPoint(x: i, y: j)
brick.physicsBody = SKPhysicsBody (rectangleOf: brick.size)
brick.physicsBody?.isDynamic = false
brick.name = "brick"
addChild(brick)
}
}
}}
我以前有一些代码func didBegin(_ contact: SKPhysicsContact)
,但我刚刚决定重新开始。
解决方案
这不是您问题的具体答案,但如果您按照以下答案中的步骤(尤其是第一个),我认为您将使您的代码正常工作:
我的碰撞和接触分步指南: https ://stackoverflow.com/a/51041474/1430420
以及碰撞和接触测试位掩码指南: https ://stackoverflow.com/a/40596890/1430420
操作位掩码以关闭和打开单独的碰撞和接触。 https://stackoverflow.com/a/46495864/1430420
推荐阅读
- php - WooCommerce 添加
产品到购物车 - python - 如何为 AWS Lambda 层组织 Python 代码
- excel-formula - 计算在特定月份注册了多少许可证
- java - 如何定义 JOptionPane showMessageDialog 多行;JRadioButton 和 JList 在一起?
- python - 仅将特定的 json 文件数据导入 python 脚本
- javascript - 通过按钮单击传递自定义值以获取 Webflow 中的弹出表单
- python - 尝试在 OpenCV python 中裁剪视频帧时出错
- node.js - CastError:Cast to ObjectId 的值在使用 NodeJs 的猫鼬中失败
- amazon-web-services - 如何在 CodePipeline 中获取辅助源的提交 ID
- python - 如何使用分隔符将数据框单元格拆分为不同的数据框。有条件