Hola makeros, en un juego de carreras similar al que os pongo aquí como ejemplo, existen varias dudas que no logro entender. Una de ellas es la posición de los coches durante la carrera. Es decir, cuál va el primero, cuál el segundo, etc...
Super Sprint (Atari 1986)
(http://upload.wikimedia.org/wikipedia/en/6/60/Arcade-atari-super-sprint1.png)
http://en.wikipedia.org/wiki/Super_Sprint (http://en.wikipedia.org/wiki/Super_Sprint)
Esta duda la encontré formulada por otro compañero en el foro aunque sin respuesta, a ver si en esta ocasión a alguien se le ocurre algo.
Saludos y gracias
A que te refieres con la posición de los coches.
Osea lo que intentas es darle una IA a cada coche, para jugar en singleplayer contra ellos no?, no consigo entender bien la pregunta, si pudieses ser más concreto..
Cita de: LowHertzs en Marzo 05, 2014, 09:14:35 PM
A que te refieres con la posición de los coches.
Osea lo que intentas es darle una IA a cada coche, para jugar en singleplayer contra ellos no?, no consigo entender bien la pregunta, si pudieses ser más concreto..
Fue lo suficientemente concreto....
El dijo para chekear quien va en primer lugar, quien en segundo, quien de tercero, quien de cuarto, etc.....
De momento no tengo una idea "concreta".... necesitare pensar mas, pero con esto quizas ayudes :D
Si la pista es recta si es facil xDD, pero si es como la de la imagen ya hay que pensar mas :D
Cita de: TLT96 en Marzo 05, 2014, 09:21:53 PM
Cita de: LowHertzs en Marzo 05, 2014, 09:14:35 PM
A que te refieres con la posición de los coches.
Osea lo que intentas es darle una IA a cada coche, para jugar en singleplayer contra ellos no?, no consigo entender bien la pregunta, si pudieses ser más concreto..
Fue lo suficientemente concreto....
El dijo para chekear quien va en primer lugar, quien en segundo, quien de tercero, quien de cuarto, etc.....
De momento no tengo una idea "concreta".... necesitare pensar mas, pero con esto quizas ayudes :D
Si la pista es recta si es facil xDD, pero si es como la de la imagen ya hay que pensar mas :D
Vale lo siento, estoy un poco espeso. Si es con eso una manera tosca de intentar hacerlo seria poniendo unos objetos que actuasen de balizas, digamos que podrías poner en ciertos puntos del juego un objeto que detecte una colisión con el coche que acaba de pasar y lo guarde. Pero en código debe de ser algo más complejo y esto es solo un concepto..
Quizás vaya relacionado con el conteo de las vueltas de cada jugador, es decir: para contar las vueltas que da cada jugador yo pondría un objeto en la meta, pero además y para que no se hagan trampas, obligaría con otros objetos baliza o check a dar la vuelta completa.
Sería: si has pasado por todas las balizas y cruzas la meta, has dado una vuelta completa.
Pero para saber quién es el primero o el segundo no tengo ni idea de cómo hacerlo, por eso os pedía vuestra opinión.
Saludos
A mi se me ocurriió algo parecido a lo que menciona el makero LowHertzs: "Plantar" en la pista objetos que especifiquen "el curso correcto". Por ejemplo, en la imagen que subiste, hay partes de la pista donde al bajar en Y se considera que el coche avanza, pero hay partes donde al bajar en Y se debería considerar que el coche retrocede. Lo mismo pasa en X, a veces al ir a la izquierda, avanzarías, pero otras veces retrocederías (irías al contrario del curso de la carrera, por lo que deberías manejar al lado contrario: la derecha)
Los coches tendrían variables algo así
dist_valida_x
dist_valida_y
Que serían una especie de contador de cuántos "kilómetros" (en realidad pixeles) has avanzado de manera correcta. Si vas en el sentido correcto, las variables aumentan (x, y o ambas si avanzas en diagonal). Si vas en el sentido contrario, las variables disminuyen, indicando que te queda más tramo por recorrer, o que vas retrocediendo en lugar de avanzar. Si avanzas bien, una variable OK = 1, si avanzas mal OK = 0.
Volviendo a los objetos "curso", éstos objetos al ser colisionados por el carro indicarían eso: "A partir de este punto, si te mueves a la izquierda, vas bien (se amenta X). Para explicarlo mejor:
(http://sia1.subirimagenes.net/img/2014/03/05/140305101205546804.jpg)
El coche inicia SABIENDO que hacia la izquierda se avanza y hacia abajo se AVANZA. Al contactar con C1, se le indica que ahora izquierda significa RETROCEDER y derecha significa AVANZAR, en este punto, abajo todavía significa AVANZAR.
Al llegar a C2, izquierda es avanzar.
Al llegar a C3, arriba es avanzar. Y así con todos los demás objetos curso. Ahora, se debe llevar un contro lde las colisiones, por ejemplo, si después de pasar el objeto C2, giras en sentido contrarioy te regresas a la meta, ya no debería contar la colisión contra C1, porque vas en sentido equivocado (OK = 0).
Ahora, para saber cuál va primero, necesitas llevar un control de cuántas vueltas lleva cada coche, eso se haría al contactar con un objeto meta posicionado en la meta. Cada que se colisione contra este objeto, se suma 1 a una variable "vueltas". Probablemente al sumar una vuelta, quieras reiniciar el contador de kilometraje. El coche que tenga mayor vueltas, va en primero. Si dos o má scoches tienen el mismo número de vueltas, va en primero el que tenga más kilometraje
Esto es lo que se me ocurrió, posiblemente sea muy enredado y no lo más óptimo. Además, sólo expuse una idea básica, se necesitaría desarrollar más para que funcionara. Por ejemplo, detectar si la punta del coche colisiona primero con la parte delantera que con la trasera de un objeto c1, y así saber si se va en dirección correcta o no.
Quizás con paths sea más fácil de lograr, pero por eso quise poner un método enredado :D
Tiene todo el sentido del mundo Penumbra, y parece ser la opción más lógica. sumar la disntacia recorrida basándose en distintos ángulos, pero si recuerdas, en el juego original había como 10 circuitos diferentes y habría que programarlo independiente para cada circuito.
Quién sabe cómo lo hicieron hace casi 30 años las mentes privilegiadas que por aquel entonces reinaban en Atari.
Muchas gracias por las respuestas, saludos