ผู้เล่นกำลังผ่านแพลตฟอร์ม

ฟังก์ชั่นผู้เล่น

@objc func playerFunction(){
    
    player = SKSpriteNode(imageNamed: "Player")
    player.name = "Hero"
    player.size = CGSize(width: 80, height: 80)
    player.physicsBody = SKPhysicsBody(rectangleOf: player.size)
    player.physicsBody?.affectedByGravity = false
    player.physicsBody?.isDynamic = false
    player.physicsBody?.allowsRotation = false
    player.physicsBody!.categoryBitMask = 1
    player.physicsBody!.collisionBitMask = 0
    player.physicsBody!.contactTestBitMask = 2 | 5 | 6 | 7
    player.physicsBody?.velocity.dx = 0
    player.physicsBody?.velocity.dy = 0
    player.zPosition = 1
    player.position = CGPoint(x: self.frame.width / 2 - 700, y: self.frame.height / 2 - player.frame.height)
    self.addChild(player)
    
}

วิธีการแพลตฟอร์ม

@objc func platformFunction (){

    platform_One = SKSpriteNode(imageNamed: "Platform")
    platform_One.physicsBody = SKPhysicsBody(rectangleOf: platform_One.size)
    platform_One.physicsBody?.affectedByGravity = false
    platform_One.physicsBody?.isDynamic = false
    platform_One.zPosition = 4
    platform_One.position = CGPoint(x: 1 + self.frame.width / 2 - 570, y: self.frame.height / 2 - 260)
    self.addChild(platform_One)
    
    
    platform_Two = SKSpriteNode(imageNamed: "Platform")
    platform_Two.physicsBody = SKPhysicsBody(rectangleOf: platform_Two.size)
    platform_Two.physicsBody?.affectedByGravity = false
    platform_Two.physicsBody?.isDynamic = false
    platform_Two.physicsBody!.categoryBitMask = 7
    platform_Two.physicsBody!.collisionBitMask = 1
    platform_Two.physicsBody!.contactTestBitMask = 1
    platform_Two.zPosition = 5
    platform_Two.position = CGPoint(x: 1 + self.frame.width / 2 - 420, y: self.frame.height / 2 - 260)
    self.addChild(platform_Two)

วิธีการของผู้เล่นและรหัสวิธีการของแพลตฟอร์มถูกเพิ่มไว้ด้านบน และผู้เล่นไม่ได้ลงจอดบนแพลตฟอร์มแทน ผู้เล่นจะต้องผ่านแพลตฟอร์ม แม้ว่าจะมีการระบุฟิสิกส์ไว้ข้างต้นก็ตาม


person OptiCode22    schedule 18.04.2021    source แหล่งที่มา
comment
คุณยังไม่ได้ตั้งค่า collisionBitMask สำหรับโปรแกรมเล่นหรือแพลตฟอร์มแรก นี่อาจเป็นปัญหา นอกจากนี้ การมาสก์ของ 2 | 5 | 6 | 7 ไม่ใช่วิธีที่ถูกต้องในการทำสิ่งต่าง ๆ - ตัวเลขควรเป็นเลขยกกำลัง 2 (เช่น 1, 2, 4, 8, 16, ...) โปรดดูคำตอบนี้สำหรับข้อมูลเพิ่มเติม   -  person George_E    schedule 18.04.2021
comment
ฉันจะตั้งค่านี้อย่างถูกต้องได้อย่างไร?   -  person OptiCode22    schedule 18.04.2021
comment
พวกมันคือมาสก์ระดับบิต (ค้นหาใน Google เพื่อค้นหาเพิ่มเติมว่าสิ่งเหล่านี้คืออะไร) โดยพื้นฐานแล้วควรเป็นเลขยกกำลัง 2 ตามที่กล่าวไว้ในคำถามที่แล้ว และไปที่ลิงก์ไปยังคำตอบในความคิดเห็นของฉันด้านบนซึ่งน่าจะแก้ปัญหานี้ได้   -  person George_E    schedule 18.04.2021
comment
ฉันเชื่อว่าเนื้อหาทางฟิสิกส์ของคุณอย่างน้อยหนึ่งรายการจำเป็นต้องตั้งค่าสถานะ isDynamic ให้เป็นจริง ไม่เช่นนั้นการชนกันจะไม่ได้รับการยอมรับระหว่างเนื้อหาเหล่านั้น   -  person JohnL    schedule 19.04.2021