Pregunta

Quiero hacer isométrica, azulejo-basado, los juegos de iPhone con cocos2D.

Los Sprites deben ser dibujado en la parte superior de otro de los sprites que están "detrás" de ella.Estoy buscando la mejor manera de hacer esto.

Me gustaría evitar que el pintor del algoritmo, porque implica la clasificación de todos los sprites de cada fotograma, lo cual es costoso.

El buffer Z algoritmo es apoyado por la GPU y cocos2D así que esto es lo que me gustaría usar, pero hay un problema.Algunos de los sprites, como los edificios, por ejemplo, ocupan varios azulejos.La asignación de un valor de Z tal que los sprites es difícil.

Estas son las opciones que he pensado:

  1. La comparación de dos de los edificios y determinar cuál es el "frente" es fácil.Para que los edificios puedan ser ordenados a continuación, se asigna un valor de Z basado en el orden de clasificación.Esto no sería diferente de la del pintor el algoritmo.El OpenGl ES Z buffer no sería necesario.
  2. Asignar un valor de Z para cada edificio basa puramente en su ubicación en el mapa (sin conocimiento de donde otros edificios que son).Estoy encontrar esto difícil.Creo que es posible, pero yo no he sido capaz de llegar a una fórmula todavía.
  3. El uso de múltiples sprites para las imágenes que ocupan más de una baldosa, así todos los sprites será exactamente el mismo tamaño.Z órdenes puede ser entonces fácilmente se asignan en función de lo que el azulejo el sprite está ocupando.El el problema con esta solución es que hace que la lógica del juego mucho más complicado.Todas las operaciones en un único edificio tendrá que ser repite para cada sprite el edificio se compone de.Me gustaría el tratamiento de cada objeto como una sola entidad.
  4. Modificar el cocos2D código para permitir que los sprites de tener varios valores Z en diferentes puntos.Si un sprite puede tener varios valores Z basado en lo de baldosas de una determinada parte del sprite cae, entonces el cálculo de un valor de Z para que la sección es fácil.No tengo para comparar la sprite a cualquier otro de los sprites.Creo que esto es posible mediante el uso de varios quads para cada sprite.El problema con esto es que es un poco complicado para mí, ya que soy nuevo en OpenGL ES y cocos2D.Yo no entiende cómo todas las estructuras de datos internas trabajo.Aunque parece que la solución más elegante si una fórmula no se puede encontrar.

Voy hasta votar a cualquier sugerencia o referencias a recursos útiles.

¿Fue útil?

Solución

Para #2, se puede calcular la distancia de Manhattan el centro del objeto y utilizar este valor como el valor de z de ese objeto.Funcionará siempre y cuando se evite muy larga de los objetos en el mapa como 5x1 objeto o peor.Pero si usted realmente necesita un objeto largo para ser colocado en un mosaico del mapa, la gestión de la orden z de los objetos en el mapa mediante el establecimiento de un valor de z mediante una fórmula es imposible.

Para probar esto:
1.) Coloque dos 2x2 objetos en un mapa de forma horizontal y salir de una unidad de baldosas entre ellos.
2.) Coloque un 3x1 objeto entre ellos.Pongamos nombre a los 2x2 objetos a y B, y el 3x1 objeto a. C.
3.) Si usted acaba de girar C(no cambiar su posición), z-orden de a y B de intercambio.

-Si B es ahora en el frente, algunos de los objetos detrás de B va a estar en frente de Un debido sólo a la rotación de C.Y es costoso para saber que objetos en la parte trasera de ambos a y B anteriormente se convertirá en frente de Una después de la C de la rotación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top