Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda sobre la escala de las imagenes

Iniciado por Goosebrush, 01 de Noviembre de 2011, 07:12:54 PM

« anterior - próximo »

Goosebrush

Tengo una gran duda sobre el reescalado de las imagenes. Estoy intentado hacer un juego de carreras que se puedan jugar hasta 4. Quiero que según aumente la velocidad la camara se aleje. El problema lo tengo con la distancia entre los objetos al reescalarlos. Por ejemplo, imaginaros que tengo 2 naves, una pegada al lado de la otra. Cuando empiezan a aumentar la velocidad, se hacen mas pequeñas. Al disminuir el tamaño parece que la distancia entre las 2 naves se incrementa (aunque la coordenada X no cambie).
Pues el tema es que estoy dandome cabezazos y no encuentro la forma de variar la coordenada X al mismo tiempo que la escala para que se queden a la misma distancia (o sea, que si hay un dedo de distancia en la escala 1, cuando pase a escala 0.1 aun esten a un dedo de distancia).

¿Alguna idea?

Mars Attacks

#1
Camera.Y = offset+parametro_empirico*mod(nave1.pos,nave2.pos)

Donde offset es la distancia inicial que quieras, y el parámetro empírico un número que te dará probando a ojo entre la distancia más corta y la distancia más alejada que vayas a encontrar entre las naves.

Edito: 2D, 2D, 2D. Pues Escala=escala_offset_inicial+parametro_empirico*mod(nave1.pos,nave2.pos)

Edito2: Creo que tu problema es que estás escalando elemento a elemento en su posición, y no todo el conjunto con respecto a un punto de pivote.

Goosebrush

Gracias por la respuesta.

Como bien comentas mi problema es que lo estoy haciendo elemento a elemento, por que no se hacerlo de otra forma. Si alguno tiene algún ejemplo de como hacerlo en conjunto, pues seria cojonudo, si no, lo intentare con tu formula, aunque no creo que me aclare.  :-[

blau

Pasale la matriz de vista de la camara,( con el zoom /escala incluido), al spritebatch


spritebatch..Begin(..,...,...,Camera.View)



Un saludo


bnl

No se si he entendido bien el problema o si se me esta escapando algo, pero creo que bastaria con aplicar la escala a todas las coordenadas.

Por ejemplo si un objeto esta va de x=0 a x=1 y otro objeto va de x=3 a x=4 (estaria separado 2 unidades del primer objeto) y le aplicas una escala 1:2 pasarian a estar de x=0 a x=0.5 y de x=1.5 a x=2

De esta forma se verian de la mitad de tamaño y la distancia entre ambos se mantendria proporcional y pasareia de ser 2 unidades a ser de 1.

Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

Goosebrush

Suena tan fácil cuando lo decís vosotros.  :D

No sabía que el spritebatch.Begin() se le pudiera pasar un parámetro para cambiar la escala. He visto que es el último parámetro y como comentas es una matriz. ¿Qué valores debería pasarle a esa matriz? ¿Algún ejemplo? He visto algo, pero no me he aclarado para definir la cámara.

Gracias !

Goosebrush

Bueno, buscando he encontrado un ejemplo que me vale para lo que necesito (de momento  :D).

Algo así:

transformMatrix = Matrix.CreateTranslation(new Vector3(-640, -360, 0)) * Matrix.CreateRotationZ(0) *
                              Matrix.CreateScale(new Vector3(escala, escala, 1)) *
                              Matrix.CreateTranslation(new Vector3(1280 * 0.5f,720 * 0.5f, 0));

Gracias a todos por la orientación. Ahora, a seguir a ver como acaba esto.  :)

blau

Basicamente es eso, si ;)

  -PosicionDelObjetoQueSigueLaCamara * Rotacion * Zoom * TraslacionCentroDelViewport


Goosebrush

Cita de: blau en 02 de Noviembre de 2011, 09:43:49 PM
Basicamente es eso, si ;)

  -PosicionDelObjetoQueSigueLaCamara * Rotacion * Zoom * TraslacionCentroDelViewport



Bueno, ahora ademas de usarlo ya se que significa. Gracias !!

Hans

#9
Lo de pasar la cámara al spritebatch es realmente cómodo, lo uso hasta para renderizar partículas 2D en mundos 3D. Si no recuerdo mal es algo que venía con XNA 4.0, de hecho creo que es de los pocos cambios/añadidos de XNA 4.0 que me gusta respecto al 3.1 xDD

Goosebrush

Cita de: Hans en 03 de Noviembre de 2011, 08:49:03 AM
Lo de pasar la cámara al spritebatch es realmente cómodo, lo uso hasta para renderizar partículas 2D en mundos 3D. Si no recuerdo mal es algo que venía con XNA 4.0, de hecho creo que es de los pocos cambios/añadidos de XNA 4.0 que me gusta respecto al 3.1 xDD

Tomo nota. Tambien quiero añadir algo de particulas (algun efecto sencillo), sobre todo para practicar con ellas y ver como funcionan. Supongo que cuando llegue el momento seguramente ya me dejare caer con alguna pregunta.  :)

blau

Cita de: Hans en 03 de Noviembre de 2011, 08:49:03 AM
Lo de pasar la cámara al spritebatch es realmente cómodo, lo uso hasta para renderizar partículas 2D en mundos 3D. Si no recuerdo mal es algo que venía con XNA 4.0, de hecho creo que es de los pocos cambios/añadidos de XNA 4.0 que me gusta respecto al 3.1 xDD

emm... esto estaba ya en el 3.1...  ;) lo que ha cambiado es el tratamiento de los effects y la forma de establecer los estados del pipeline...







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.