2015-07-09 14 views
6

Tôi muốn có thể thay đổi chiều cao vật lý của nút khi người dùng vuốt xuống, nhưng không thể tìm ra cách thực hiện điều này, bên cạnh việc đặt lại toàn bộ physicsBody.Thay đổi kích thước SpriteNode PhysicsBody tại thời gian chạy

Khi tôi ban đầu được nạp nút, tôi sử dụng mã bên dưới:

nodeHero.color = UIColor .grayColor() 
    nodeHero.size.width = 20 
    nodeHero.size.height = 45 
    nodeHero.position.x = -frame.size.width/2 + 45 
    nodeHero.position.y = pointMainY + 30 + nodeHero.size.height/2 
    nodeHero.zPosition = 110 

    nodeHero.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(nodeHero.size.width, nodeHero.size.height)) 
    nodeHero.physicsBody?.mass = 1 
    nodeHero.physicsBody?.angularVelocity = 0 
    nodeHero.physicsBody?.allowsRotation = false 
    nodeHero.physicsBody?.restitution = 0 
    nodeHero.physicsBody?.categoryBitMask = bitHero 

    addChild(nodeHero) 

Và khi tôi vuốt xuống, tôi muốn để có thể làm điều gì đó như thế này (điều này không làm việc):

nodeHero.size.height = 28 
    nodeHero.physicsBody?.size.height = 28 

Nhưng thay vào đó tôi phải sử dụng nodeHero.physicsBody = SKPhysicsBody() một lần nữa, mà resets tất cả các thuộc tính physicsBody khác, vì vậy tôi phải làm điều này:

nodeHero.size.height = 28 

    nodeHero.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(nodeHero.size.width, nodeHero.size.height)) 
    nodeHero.physicsBody?.mass = 1 
    nodeHero.physicsBody?.angularVelocity = 0 
    nodeHero.physicsBody?.allowsRotation = false 
    nodeHero.physicsBody?.restitution = 0 
    nodeHero.physicsBody?.categoryBitMask = bitHero 
+0

Nếu bạn chạy một hành động tỷ lệ trên một nút có vẻ như cơ thể vật lý của nó cũng sẽ thay đổi: https://stackoverflow.com/questions/24638086/scaling-physics-bodies-in-xcode-spritekit/33572073#33572073 – peacetype

Trả lời

3

According to SpriteKit documentation không thể sửa đổi vùng SKPhysicsBody, vì vậy bạn cần phải tạo một cá thể SKPhysicsBody khác và sao chép các giá trị bạn muốn giữ từ phiên bản trước đó.

+0

Ricardo Amores là đúng, bạn không thể thay đổi kích thước physicsBody tại thời gian chạy bạn cần phải tạo lại nó và gán lại cho kết cấu của bạn – dragoneye

Các vấn đề liên quan