cocos2d-iphone velocity cocos2d-x-3.0 ccsprite chipmunk

cocos2d iphone - ¿Cómo impacta la velocidad en CCSprite en Cocos2d Chipmunk?



cocos2d-iphone velocity (0)

¿Necesito la comprensión básica de cómo funciona el cambio de velocidad? es decir, ¿cómo CCSprite puede saltar a una altura particular cuando se establece una velocidad?

Déjame darte un ejemplo en el que estoy trabajando actualmente. Estoy preparando un demo como flappy bird, en el que quería que mi pájaro aterrizara en tuberías verticales. Entonces, es como, mi pajarito salta de la tubería a otra tubería: sonríe :. Comprueba el gif que coloco aquí: https://www.dropbox.com/s/n46vak6qy5wu4x4/jumpyBall_15_jul_152.gif?dl=0

Estoy usando Sprite Builder e hice esta demostración con gravedad = (0, -300) . La distancia entre las tuberías es 149 . Entonces, cuando la demostración comienza, mi birdy cae sobre la plataforma y el siguiente método se ejecuta en colisión de birdy y plataforma.

Nota

distanceObst = 149

__player = birdy

dummyPos = la posición inicial X de la primera tubería

héroe = __player

plataforma = tubo

func ccPhysicsCollisionPreSolve(pair: CCPhysicsCollisionPair!, hero: Player!, platform: Obstacle!) -> Bool { if (dummyPos < 120) { // This is to confirm that velocity X is set only once in lifetime. __player.physicsBody.velocity.x = 80 } hero.physicsBody.velocity.y = 283 NSLog("--- Velocity /(hero.physicsBody.velocity.y) and distance /(ccpSub(hero.position, ccp(dummyPos, 0)))") dummyPos = hero.position.x return true }

Primero revisa la consola para ver la ejecución de este código

2015-08-09 02:34:05.042 tsb[15327:94829] cocos2d: surface size: 1136x640 2015-08-09 02:34:05.750 tsb[15327:94829] --- Velocity 283.0 and distance (135.0,153.25) 2015-08-09 02:34:07.617 tsb[15327:94829] --- Velocity 283.0 and distance (149.334320068359,154.448120117188) 2015-08-09 02:34:09.483 tsb[15327:94829] --- Velocity 283.0 and distance (149.333770751953,155.526428222656) 2015-08-09 02:34:11.366 tsb[15327:94829] --- Velocity 283.0 and distance (150.664428710938,151.796905517578) 2015-08-09 02:34:13.233 tsb[15327:94829] --- Velocity 283.0 and distance (149.331237792969,153.140319824219) 2015-08-09 02:34:15.100 tsb[15327:94829] --- Velocity 283.0 and distance (149.331237792969,154.349395751953) 2015-08-09 02:34:16.967 tsb[15327:94829] --- Velocity 283.0 and distance (149.33642578125,155.437561035156) 2015-08-09 02:34:18.850 tsb[15327:94829] --- Velocity 283.0 and distance (150.671020507812,151.716918945312)

Es como cuando empiezo a rebotar el pajarito rebota correctamente desde el centro de la tubería pero cuando continúa rebotando después de unos segundos, el pajarito se desplaza y llega al borde izquierdo / derecho de la tubería y algunas veces cae al suelo: boca abierta :. Comprueba este GIF: https://www.dropbox.com/s/v07lfah35iojitz/jumpyBall_15_jul_153.gif?dl=0

Observé que hay cambios en los valores de distancia en el parámetro X que es visible en la consola. Creo que esta podría ser la causa, pero el valor aquí se calcula y no sé por qué no tiene el mismo valor, como, 149.

Si quieres verificar mi método de actualización ,

override func update(delta: CCTime) { __player.position = ccp(__player.position.x /*+ (scrollSpeed * CGFloat(delta))*/, __player.position.y) __physicsWorld.position = ccp(firstObstPos - __player.position.x, __physicsWorld.position.y) }

Aquí en la actualización, simplemente sigo el ''__player'' para que pueda permanecer en la pantalla.

¿Puede alguien darme la guía adecuada de lo que debo hacer porque los valores que tomé aquí son constantes y si quiero aumentar la velocidad, aumento la velocidad X o puede disminuir la velocidad Y, lo que afectará la distancia entre las tuberías también.

¿Hay alguna fórmula así que puedo calcular la velocidad y configurarla para viajar exactamente a la distancia 149?

Busqué en Google y encontré algunas ecuaciones de velocidad, pero no pude averiguar cómo se pueden aplicar en la ardilla Cocos2d. ¿Alguien puede decirme cómo Chipmunk decide la altura, la duración y la distancia de rebote de la velocidad simple (80, 283) y la gravedad (0, -300) ?

Estas respuestas serán de gran ayuda para mí. Gracias chicos.

*********** Actualización - 16/08/15 *****************

He modificado mi código y ahora, en lugar de tomar valores de corrección, uso alguna fórmula para calcular la velocidad, el tiempo, la altura y la distancia. De esta manera obtengo respuestas perfectas sobre lo que quiero.

let Pi = CGFloat(M_PI) let degreesToRadians = CGFloat(Pi / 180) let radiansToDegrees = CGFloat(180 / Pi) func d2R(angle: CGFloat) -> CGFloat { return angle * degreesToRadians } func updateSpeed() { // t = (2*V*Sin(a))/g -> V = (t*g)/(2*sin(a)) // h = ((V*V)/2g)*Sin^2(a)) // D = ((V*V)/g)*sin(2*a) let angle = d2R(cAngle) velocity_y = (delta_t * gravity)/(2*sin(angle)) maxJumpHeight = ((velocity_y*velocity_y)/(2*gravity))*(sin(angle)*sin(angle)) //distanceObst = ((velocity_y*velocity_y)/gravity)*sin(2*angle) // Distance in terms of speed rather than velocity distanceObst = delta_t*scrollSpeed var a = 10 // Debug line }

Ahora la colisión previa será

func ccPhysicsCollisionPreSolve(pair: CCPhysicsCollisionPair!, hero: Player!, platform: Obstacle!) -> Bool { let diff = ccpSub(hero.position, ccp(dummyPos, 0)) let distance = distanceObst + (distanceObst - diff.x) NSLog("--- Velocity /(hero.physicsBody.velocity) and /(hero.position) -> /(dummyPos) distance /(diff) and /(distance)") if ((dummyPos > firstObstPos) && (diff.x > 0)) { // TODO: Adjustment for the bounce point when distance travelled differs //velocity_y = velocityForDistance(distance) //delta_t = ((delta_t*diff.x)/distance) //updateSpeed() } hero.physicsBody.velocity.y = velocity_y dummyPos = hero.position.x return false }

Pero mi resultado no coincide con lo que espero.

Chicos por favor respondan o al menos sugiero que estoy agotado con esto y no puedo encontrar una solución adecuada :(.