Mover la camera 2d en la dirección y

Estoy desarrollando un juego simple para el iphone y estoy luchando por encontrar la mejor manera para que la camera siga al personaje principal. La siguiente image resalta los tres componentes principales:

carácter y terreno

Hay 3 componentes para esto:

  • Circle – el personaje principal
  • Línea verde – terreno
  • Fondo negro

El terreno está hecho simplemente de una matriz de puntos (aproximadamente 20 puntos por ancho de pantalla). El terreno se mueve en la dirección x relativa al background negro para mantener el círculo en la position que se muestra. La distancia para mover el terreno es simplemente:

movex = circle.position.x – terrain.position.x

con una constante para arreglar el círculo a cierta distancia de la izquierda de la pantalla.

Estoy luchando para determinar la mejor manera de posicionar el terreno en el plano y mantener el foco en el personaje. Quiero mover el terreno en la dirección y suavemente y no fijarlo a la position del círculo, por lo que el círculo puede moverse en el plano y.

Si tomo el mismo enfoque que el posicionamiento x, el personaje se fija en un punto de la pantalla y el terreno se mueve. Pude probar algunos puntos del terreno a cada lado del personaje y producir un promedio, pero en mi implementación esto no fue fácil. Pensé que otro enfoque podría ser crear una "línea" de camera que sea una versión suave de la línea de terreno y hacer que la camerea siga esto, pero no estoy seguro de si esta es la solución óptima. ¡Cualquier consejo es muy apreciado!

Lo que podría hacer es determinar dónde se encuentra el personaje dentro de la window gráfica y solo mover la camera hacia arriba si está dentro (por ejemplo) del 20% superior o hacia abajo si está dentro del 20% inferior. Tome esta image, por ejemplo: Ejemplo de pelota

Las líneas rojas y azules representan el lugar donde el jugador movería la camera. Por ejemplo, cuando la position de la pelota golpea la línea roja, la camera se movería hacia arriba con el jugador. Si la position de la pelota golpea la línea azul, la camera se moverá hacia abajo con el jugador. Esto permitiría que la pelota rebotara y se moviera dentro del área entre las líneas roja y azul, pero aun así mantuviera a la camera siguiendo la pelota si, por ejemplo, rebotaba muy alto.

Podría mover la línea azul si quisiera centrarla en la pantalla la mayor parte del time.

Dejaría que la bola se moviese en el plano relativo a la camera dentro de un cierto range. Supongamos que la pantalla tiene 100 píxeles de alto (no recuerdo las especificaciones reales); si la bola y está por encima de un cierto umbral, tal vez 70px por encima de la parte inferior de la pantalla, mueva la camera hacia arriba con el reproductor. Si la pelota está por debajo de 30px, mueve la camera hacia abajo con el jugador. De lo contrario, mantenga la camera fija y deje que la bola se mueva.

Es posible que desee volver a centrar lentamente la camera en el reproductor si permanece "atascado" en uno de los umbrales.