簡體   English   中英

Xcode Swift游戲(沖突問題)

[英]Xcode Swift Game ( Issue with Collisions )

我正在嘗試使“塊”與“地面”碰撞,而不是穿過地面並消失的塊!

這是我的代碼塊

        hero = CSHero()
    hero.position = CGPointMake(70, movingGround.position.y + movingGround.frame.size.height/2 + hero.frame.size.height/2)
    hero.physicsBody = SKPhysicsBody(rectangleOfSize: hero.size)
    hero.physicsBody?.dynamic = true
    hero.physicsBody?.contactTestBitMask = heroCategory | groundCategory
    hero.physicsBody?.collisionBitMask = heroCategory | groundCategory
    addChild(hero)

這是我的地面守則

        let ground1 = SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(view.frame.size.width, 15))
    ground1.position = view.center
    ground1.physicsBody = SKPhysicsBody(rectangleOfSize: ground1.size)
    ground1.physicsBody!.dynamic = false
    ground1.physicsBody!.contactTestBitMask = groundCategory | heroCategory
    ground1.physicsBody!.collisionBitMask = groundCategory | heroCategory
    addChild(ground1)

每次運行它時,如果將dynamic設置為true,該塊就會消失。

有什么幫助嗎?

您忘記了PhysicsBody碰撞邏輯的一個非常重要的部分: categoryBitMask categoryBitMask屬性告訴系統它是什么類型的對象。 從本質上講,您是在告訴系統希望每個對象碰撞的對象,但是卻忘記告訴系統它們實際上是什么類型的對象。

為了進一步說明,僅當您實際上想在兩件事發生沖突但不希望它們的物理物體contactTestBitMask時得到通知時, contactTestBitMask需要contactTestBitMask (想想馬里奧什么時候打硬幣。他不會從硬幣上彈開,但是當您更新硬幣計數時,需要通知您上述碰撞)。 collisionBitMask告訴系統實際與哪些物體碰撞。 但是此屬性需要與categoryBitMask配對才能真正起作用。

現在,您擁有所需的一切。 不需要Dynamic 您需要做的是添加以下兩行代碼:

ground1.physicsBody?.categoryBitMask = groundCategory
hero.physicsBody?.categoryBitMask = heroCategory

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM