我真的需要知道如何鎖定SKSpriteNode及其物理體的x軸。我需要保持SKSpriteNode dynamic
和affectedByGravity
。節點在斜坡上,所以這就是爲什麼它的x軸因重力而移動。但是,我不希望這個SKSpriteNode的x軸因重力而移動。有沒有辦法鎖定X軸來實現這一目標? 感謝您的幫助:D
Swift 3(SpriteKit):鎖定SKSpriteNode及其物理體的x軸
編輯:我試圖約束適用於這樣的x值:
let xConstraint = SKConstraint.positionX(SKRange(constantValue: 195))
node.constraints?.append(xConstraint)
然而,這並不工作,我不知道爲什麼和如何要解決這個問題。任何人都知道解決方案?
編輯2:SKPhysicsJointPin
實際上看起來更有希望。在對這個問題的第一個回答/回答的評論中,我一直試圖想象如何在我的情況下正確使用它。
的我的代碼的一個例子:
let node = SKSpriteNode(imageNamed: "node")
enum collisionType: UInt32 {
case node = 1
case ground = 2
case other = 4 //the other node is unrelated to the ground and node
}
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMove(to view: SKView) {
//Setup node physicsBody
node.physicsBody = SKPhysicsBody(rectangleOf: node.size)
node.physicsBody?.categoryBitMask = collisionType.node.rawValue
node.physicsBody?.collisionBitMask = //[other node that isn't the ground or the node]
node.physicsBody?.contactTestBitMask = //[other node that isn't the ground or the node]
node.physicsBody?.isDynamic = true
node.physicsBody?.affectedByGravity = true
addChild(node)
//Physics Setup
physicsWorld.contactDelegate = self
}
的節點是在地面上的頂部,和接地由具有一個volumeBased physicsBody各種SKSpriteNode線。地面不斷在前面添加新線條,並移除後面的線條,並將每條線條的x值更改爲負值(因此地面似乎正在移動 - 此過程在SKAction中執行)。這些線(地面的部分)處於一個角度,這就是節點x軸移動的原因。我希望節點始終位於地面的前端(例如,始終位於新創建的線的頂部)。目前,設置這樣的節點的位置鎖(解決我的問題)x軸:
override func didSimulatePhysics() {
//Manage node position
node.position.x = 195
node.position.y = CGFloat([yPosition of the first line of the ground - the yPosition keeps changing])
}
注: ^這^功能GameScene類裏面居然
x軸停留在像這樣。 但是,問題是現在節點的物理體比節點的中心低(之前沒有發生過)。
你說約束不起作用。這是不是一點都不起作用,完全沒有效果? – Confused
你是什麼意思你不想讓X軸因重力而移動?重力不會影響x軸上的精靈,也許你需要更好地解釋問題 – Knight0fDragon
@Confused是的,這就是我的意思,但didSimulatePhysics()基金工作得更好,但現在有一個新問題 - 閱讀我的編輯。 –