我正在製作一個簡單的遊戲,其中物體從屏幕的頂部落下並落在屏幕底部(類似於俄羅斯方塊)的地面上,其中玩家在地面上避免和摧毀物體。我希望玩家在碰到左右兩側時能夠摧毀物體,並且我希望玩家在物體落到他身上時被殺死。我也希望玩家能夠在不破壞物體的情況下跳上物體。在SpriteKit中給定SpriteNode的每一邊創建物理實體
我想弄清楚正確的座標,以便爲我的對象的每一面做一個物理體。 (這裏是一些代碼,我正在同,試圖做到這一點):
let topLeftPoint = CGPointMake(1, (objectSprite.size.height))
let bottomLeftPoint = CGPointMake(1 , 1)
let topRightPoint = CGPointMake((objectSprite.size.width), (objectSprite.size.height))
let bottomRightPoint = CGPointMake((objectSprite.size.width), 1)
self.topSideBody = SKPhysicsBody(edgeFromPoint: topLeftPoint, toPoint: topRightPoint)
self.topSideBody.categoryBitMask = ObstacleSide.topSide.rawValue
self.topSideBody.contactTestBitMask = BodyType.player.rawValue | BodyType.grassObject.rawValue
self.leftSideBody = SKPhysicsBody(edgeFromPoint: topLeftPoint, toPoint: bottomLeftPoint)
self.leftSideBody.categoryBitMask = ObstacleSide.leftSide.rawValue
self.leftSideBody.contactTestBitMask = BodyType.player.rawValue | BodyType.grassObject.rawValue
self.rightSideBody = SKPhysicsBody(edgeFromPoint: topRightPoint, toPoint: bottomRightPoint)
self.rightSideBody.categoryBitMask = ObstacleSide.rightSide.rawValue
self.rightSideBody.contactTestBitMask = BodyType.player.rawValue | BodyType.grassObject.rawValue
self.bottomSideBody = SKPhysicsBody(edgeFromPoint: bottomLeftPoint, toPoint: bottomRightPoint)
self.bottomSideBody.categoryBitMask = ObstacleSide.bottomSide.rawValue
self.bottomSideBody.contactTestBitMask = BodyType.player.rawValue | BodyType.grassObject.rawValue
physicsBody = SKPhysicsBody(bodies: [topSideBody, leftSideBody, rightSideBody, bottomSideBody])
objectSprite.physicsBody = physicsBody
//objectSprite.physicsBody?.categoryBitMask = BodyType.grassObject.rawValue
objectSprite.physicsBody!.friction = 0.0
objectSprite.physicsBody!.dynamic = true
objectSprite.physicsBody!.affectedByGravity = true
objectSprite.physicsBody!.restitution = 0.0
objectSprite.physicsBody!.allowsRotation = false
self.zPosition = 102
我主要是不確定的,我應該使用,或者什麼座標,如果有做這個簡單的方法。我也沒有任何問題摧毀障礙,並根據我爲障礙設置的一些布爾值來殺死玩家,我的主要問題是玩家能夠在不破壞物體的情況下在物體的頂部行走。
如果你想對每個身體碰撞做出不同的反應,比如碰到bottomSideBody時死機,碰到topSideBody時碰撞,那麼你需要創建4單獨的SKNodes(您可以將它們與一個共同的父母捆綁在一起)。使用SKPhysicsBody(body :)接受給定物體碰撞區域的聯合,並將它們組合成一個單一的物體,您將無法以後區分「子物體」。 – cpimhoff
此外,您的點值應固定在0. let topLeftPoint = CGPoint(x:0,y:self.size.height)... – cpimhoff
@cpimoff所以我想出了正確的座標並創建了4個單獨的SKPhysicsBodys來組成物理機構爲我的對象/障礙。我現在遇到障礙物本身碰撞的問題(objectSprite.physicsBody = SKPhysicsBody(body:[topSideBody,leftSideBody,rightSideBody,bottomSideBody])構成了我的對象/障礙節點)。我試圖給我的objectSprite一個categoryBitMask來處理它的碰撞,但這似乎並不奏效。當我將各個位掩碼分配給兩側時,我似乎無法讓它們碰撞 –