Tôi đang cố gắng tạo nền tảng di chuyển trên Swift và để người chơi di chuyển cùng với nền tảng, tôi cần thay đổi self.moveByX()
, đơn giản hơn nhiều, đến physicsBody?.velocity
(và thêm một số ma sát cho cả nền tảng lẫn trình phát).Swift: Đặt tốc độ cho khoảng cách
Vì vậy, tôi đã thực hiện một chức năng như thế này:
self.runAction(
SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock({
print(self.position.x)
self.physicsBody?.velocity = CGVectorMake(20, 0.0)
}),
SKAction.waitForDuration(3),
SKAction.runBlock({
print(self.position.x)
self.physicsBody?.velocity = CGVectorMake(-20, 0.0)
}),
SKAction.waitForDuration(3)
])
)
)
Vấn đề là tôi mong đợi sự khác biệt giữa các vị trí chính xác là 60 (20 * 3s), nhưng tôi nhận được các bản ghi của nền tảng x
vị trí như thế này:
596.042907714844
544.228393554688
596.048950195312
544.234008789062
596.054565429688
544.116333007812
595.936584472656
544.121887207031
595.942199707031
544.127685546875
595.824584960938
544.009704589844
Vì vậy, sự khác biệt giữa các vị trí là một cái gì đó giữa 51 ~ 52
làm thế nào để làm cho di chuyển nền tảng trong một spec ific và khoảng cách chính xác bằng cách thay đổi vận tốc?
Chỉnh sửa: Tôi không biết nếu điều này là có liên quan, nhưng tôi đã thiết lập cơ thể vật lý của nền tảng như thế này:
self.physicsBody = SKPhysicsBody(rectangleOfSize: self.size)
self.physicsBody?.categoryBitMask = PhysicsCategory.Ground
self.physicsBody?.contactTestBitMask = PhysicsCategory.Player
self.physicsBody?.collisionBitMask = PhysicsCategory.Player
self.physicsBody?.allowsRotation = false
self.physicsBody?.affectedByGravity = false
self.physicsBody?.dynamic = true
self.physicsBody?.friction = 1.0
self.physicsBody?.restitution = 0.0
self.physicsBody?.mass = 99999999999
Tôi chưa từng làm việc với bộ công cụ giả lập trong một thời gian. Nhưng tôi đoán bạn đang lặp đi lặp lại vận tốc nhiều lần. Trong "SKAction.runBlock" của bạn, hãy thử đặt lại vận tốc của bạn về 0 trước khi áp dụng "self.physicsBody? .velocity". Một lần nữa đây chỉ là một đoán, tôi không làm việc với spritekit nữa. Nhưng sự mất ma sát/vận tốc có thể không giống nhau cho cả hai vật thể. Đặt lại vận tốc có thể khắc phục nó. Nguoi ban doi may man. –
Vâng, tôi đã thử nó quá, vấn đề không thay đổi –
Hoàn toàn để thử nghiệm, bạn đã cố gắng để làm cho cả hai đối tượng cùng kích thước/khối lượng? Khi bạn làm điều đó, vấn đề có biến mất không? –