Sto provando a creare una piattaforma mobile su Swift e, per far muovere il giocatore insieme alla piattaforma, ho dovuto cambiare lo self.moveByX()
, che era molto più semplice, allo physicsBody?.velocity
(e aggiungere qualche attrito sia alla piattaforma che al giocatore).Swift: imposta la velocità per la distanza
Così, ho fatto una funzione come questa:
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)
])
)
)
Il problema è che mi aspettavo la differenza tra le posizioni di essere esattamente 60 (20 * 3s), ma sto ricevendo i registri della piattaforma x
posizione come questa:
596.042907714844
544.228393554688
596.048950195312
544.234008789062
596.054565429688
544.116333007812
595.936584472656
544.121887207031
595.942199707031
544.127685546875
595.824584960938
544.009704589844
Quindi, la differenza tra le posizioni è qualcosa tra 51 ~ 52
Come faccio a fare la mossa piattaforma in uno spec distanza esatta e esatta cambiando la velocità?
Edit: Non so se questo è rilevante, ma ho impostato il corpo della fisica della piattaforma come questo:
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
Non ho lavorato con il kit sprite per un po '. Ma suppongo che tu stia ripetendo la velocità più e più volte. Nel tuo "SKAction.runBlock" prova a ripristinare la velocità a zero prima di applicare "self.physicsBody? .velocity". Ancora una volta è solo una supposizione, non lavoro più con lo spritekit. Ma la perdita di attrito/velocità potrebbe non essere la stessa per entrambi gli oggetti. Reimpostare la velocità potrebbe ripararlo. Buona fortuna amico. –
sì, l'ho provato anche io, il problema non cambia –
Solo per test, hai provato a rendere entrambi gli oggetti della stessa dimensione/massa? Quando lo fai, il problema scompare? –