[英]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.