簡體   English   中英

使物理物體對場做出響應,而不對其他物理物體做出響應

[英]Making physics bodies responsive to fields but not to other physics bodies

在我的游戲中,我有一個飛過屏幕的身體,應該受到我創建的徑向重力場的影響。 為此,我需要將

body.dynamic = true    

但這會導致身體與屏幕上的其他對象(與物理對象)發生碰撞,而我只是希望它受到場的影響而不是受這些對象的影響。 如果我把

body.dynamic = false    

那么它就不會受到該字段的影響。 我該怎么做才能使身體保持原狀?

編輯這是我創建節點后在屏幕上飛過的主體的代碼

 body.physicsBody = SKPhysicsBody(rectangleOfSize: rectangle)
    body.physicsBody?.dynamic = true
    body.physicsBody?.categoryBitMask = PhysicsCategory.body
    body.physicsBody?.contactTestBitMask = PhysicsCategory.otherBody
    body.physicsBody?.affectedByGravity = false
    body.physicsBody?.fieldBitMask = PhysicsCategory.shield
    body.physicsBody?.allowsRotation = false

該圖顯示了我希望身體避免與物體碰撞的2種可能方式。 它可以通過它,也可以繞過它並返回到較早的路徑。 我怎么做?

兩種可能的途徑

你應該設置

body.physicsBody?.collisionBitMask = 0

collisionBitMask一個掩碼,定義可以與該物理物體碰撞的物理物體類別。 如果未設置該值,則您的PhysicsBody與其他所有PhysicsBodies PhysicsBody碰撞,如果PhysicsBodies值設置為0,則您的PhysicsBody不會與其他PhysicsBodies發生碰撞。

如果將collisionBitMask = 0設置collisionBitMask = 0 body節點將遍歷所有其他節點,如果您希望其碰撞,則需要設置節點physicsBody?.collisionBitMask (例如,如果您希望您的節點僅與球和牆physicsBody?.collisionBitMask = kCategoryWall | kCategoryBall

希望對您有所幫助

暫無
暫無

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

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