Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Temas - Dirfinyu

#1
General Programadores / Problema al crear juego de futbol en 2d
29 de Noviembre de 2011, 08:41:49 PM
Saludos a todos!!
A ver si algun programador experto me puede ayudar, explico el problema a ver si se entiende bien.
Estoy creando un juego para wii(en C, aunque para esto el lenguaje no importa), es un juego de futbol en 2D. En él, el campo de futbol es un png que mide 1024x424(1024es el máximo permitido), y lo primero que hago es dibujarlo aumentando un 20% su tamaño, lo voy dibujando parte a parte:
DrawPart (0, 0, PosX-250, PosY-250, 640,480, tex_estadio, 0, 1.2, 1.2, WHITE);
PosX y PosY son las coordenadas que determinan que parte se muestra.

Despues dibujo los jugadores(3):
if (PtInRect(0,0,640,540,x[1],y[1])) GRRLIB_DrawTile(x[1], y[1], tex_mm, 0, 2, 2, WHITE, Jugadores.frame[1]);
if (PtInRect(0,0,640,480,x[2],y[2])) DrawTile(x[2], y[2], tex_bo, 0, 2, 2, WHITE, Jugadores.frame[2]);
if (PtInRect(0,0,640,480,x[3],y[3])) DrawTile(x[3], y[3], tex_go, 0, 2, 2, WHITE, Jugadores.frame[3]);

Como veis multiplico el tamaño del jugador x2 y las coordenadas x e y sale de un sencillo calculo hecho anteriormente:
for(i=1; i <4; i++) {
x[i]=Jugadores.bgx[i]+PosX; y[i]=Jugadores.bgy[i]+PosY;
}

bgx y bgy son las coordenadas de los jugadores.

Y finalmente dibujo el balón:
XBalon=bgx2+PosX; YBalon=bgy2+PosY;
if (PtInRect(0,0,640,480,XBalon,YBalon)) DrawImg(XBalon, YBalon, tex_balon, 0,1.5, 1.5, WHITE);

Como veis multiplico el tamaño por 1,5, y lo muestro solo si esta visible en la pantalla de juego(que en wii la resolucion es 640x480, al igual que los jugadores).

Como observais todo se centra en PosX y PosY que delimitan qué parte del campo se muestra. Pongo un ejemplo de lo que hago al mover el jugador a la derecha:

if(wpadheld & WPAD_BUTTON_DOWN) {
if (CapiBalon >0) {
if (PosX < XC2) {
Jugadores.bgx[JugadorSeleccionado] -=3;
bgx2 = Jugadores.bgx[JugadorSeleccionado];
PosX+=3;
}
}
else {
Jugadores.bgx[JugadorSeleccionado] +=3;
}
           Jugadores.direction_new[JugadorSeleccionado] = TILE_RIGHT;
}

WPAD_BUTTON_DOWN determina que el jugador va hacia la derecha. XC2 el maximo que puede avanzar. Lo que hago aquí es mover el jugador y no la pantalla si no tiene el balon, y si lo tiene es donde ejecuto esto:
Jugadores.bgx[JugadorSeleccionado] -=3;
bgx2 = Jugadores.bgx[JugadorSeleccionado];
PosX+=3;

Osea situo siempre el balón en el centro de la imagen.

El problema que me estoy encontrando es que si te mueves hacia la derecha con el balon, el jugador que tiene la posesion cumple todo perfecto, pero el resto de jugadores no varian su bgx ni bgy pero siempre son visibles en la pantalla, se renderizan en la misma posicion del televisor. He probado a ajustar sus coordenadas al mover de esta manera:
if (CapiBalon >0) {
if (PosX < XC2) {
Jugadores.bgx[JugadorSeleccionado] -=3;
Jugadores.bgx[2] -=6;
Jugadores.bgx[3] -=6;
bgx2 = Jugadores.bgx[JugadorSeleccionado];
PosX+=3;
}

Pero no se quedan totalmente quietos, ni con -6,-5,-7 ni ninguno(el -6 es el que mas quietos los dejan, aunque te siguen un poco mas lento).

Otro problema grave que da esto es al disparar, que los ejes se vuelven locos y hay que estar recolocando y eso queda fatal. por ejemplo disparo a puerta, el balon entra y tengo que colocar despues el balon otra vez(queda en la linea de meta). Ademas da problemas en relacion a la PosX y el resto. Loslimites son xmin=0 xmax=800 ymin=0 ymax=410. Esos limites obviamente siempre se cumplen pero según la posicion de disparo PosY y PosX se mueven tan mal que si antes xmin, te situabas en la banda superior, al disparar muchas veces xmin se situa mucho mas arriba de la banda superior o mucho mas abajo.
En definitiva hay desajustes por todos lados y creo que es imposible ajustarlo al 100%, y eso que aun no me he metido en tema pases, paradas del portero, rechaces...

Espero que se entienda más o menos bien.

Mi pregunta es:
¿estoy enfocandolo bien?
¿como lo hariais vosotros?
¿Se puede conseguir esto?:
Crear un campo(vector) asi
0/0///////////////////////////////////////////////////////////////////////////////////1024/0
/                                                                                       /
/                          /////////////////////                                        /
/                          /  Camara  /                                        /
/                          /  Camara  /                                        /
/                         /////////////////////                                         /
/                                                                                       /
/                                                                                       /
/                                                                                       /
/                                                                                       /
0/424//////////////////////////////////////////////////////////////////////////////1024/424
Y que la camara que mide 640, 480 se fuera moviendo??una cosa importante seria que las coordenadas del balon no siempre estarian en el centro pero el balon siempre sería visible.
Si se puede como sería??

Muchisimas gracias a todos!
#2
Bueno pues estamos haciendo un mod de un juego llamado Argentum Online. estamos basando el universo en las historias narradas en los libros de Dragonlance. Es un juego de rol masivo en 2D con graficos muy simples y realizados con el Paint, aqui os dejo alguna imagen para que se hagan una idea de los graficos que se necesitan, dentro de la web vereis 2 graficos:
http://www.gs-zone.com.ar/ft12899_armadura-amp-escudo-.html

Bien pues necesitamos algun grafista que pudiera crearnos alguna raza, alguna armadura y cosas asi.
Interesados contactar con victorcloud14@hotmail.com
saludos!
PD: por desgracia el staff(yo y un amigo) somo estudiantes con pocos fondos asi que el trabajo no es remunerado, lo siento.
#3
Proyecto dx_lib32 / Problema con dx_lib y las animaciones
02 de Junio de 2007, 09:39:26 AM
Hola a todos. Soy un aficionado a la programacion con VB, y hace poco descubri esta libreria(Miles de felicitaciones por ella).
Empece a probar las cosas y todo me sale mas o menos bien. Si bien, antes de nada me gustaria añadir que mi forma de programar es un poco...primitiva.
Hice un inicio de juego en el que si aprietas la tecla derecha un bicho se va moviendo, voy modificanco estos valores:
Cuerpo = m_gfx.MAP_Load(App.Path & "\graficos\cuerpo10.png", 0)', True)
Y luego los dibuja en pantalla.
Call m_gfx.DRAW_Map(Cuerpo, PosXCuerpo, PosYCuerpo, 0, 106, 82)
Puse que al pulsar la tecla derecha sumara 1 al contyador animacion y si el contador es 1, o 2 o 3 o 4 el valor de Cuerpo cambie.

Las imagenes realizadas para la animacion estan en png y de fondo puse otra imagen png. Bien pues cuando no pulsas nada el cuerpo del bicho esta tal como lo dejaste y se ve perfectamente.
El problema es que al dejar presionada la tecla derecha el bicho se mueve con su animacion, pero se le ven los bordes blancos y por muchas cosas que he intentado siguen viendose blancos cuando esta en movimiento, y eso hace que quede feo ya que el fondo no es de color blanco. Aclaro otra vez que al pararse esos bordes blancos no estan.
Alguna sugerencia?
Saludos y gracias





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.