Pemain melewati platform

fungsi pemain

@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)
    
}

metode platform

@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)

Kode metode pemain dan metode platform ditambahkan di atas dan pemain tidak mendarat di atas platform melainkan pemain melewati platform meskipun fisika telah dinyatakan seperti di atas.


person OptiCode22    schedule 18.04.2021    source sumber
comment
Anda belum menyetel collisionBitMask untuk pemutar atau platform pertama. Ini mungkin masalahnya. Selain itu, topeng 2 | 5 | 6 | 7 bukanlah cara yang benar dalam melakukan sesuatu - angkanya harus pangkat 2 (misalnya 1, 2, 4, 8, 16, ...). Lihat jawaban ini untuk informasi selengkapnya.   -  person George_E    schedule 18.04.2021
comment
Bagaimana cara mengaturnya dengan benar?   -  person OptiCode22    schedule 18.04.2021
comment
Itu adalah topeng bitwise (cari di Google untuk mengetahui lebih lanjut tentang apa itu). Pada dasarnya mereka harus pangkat 2 seperti yang disebutkan dalam pertanyaan terakhir, dan ikuti tautan ke jawaban di komentar saya di atas yang seharusnya menyelesaikan masalah ini.   -  person George_E    schedule 18.04.2021
comment
Saya yakin setidaknya salah satu badan fisika Anda harus menyetel tanda isDynamic ke true, jika tidak, tabrakan di antara keduanya tidak akan dikenali.   -  person JohnL    schedule 19.04.2021