mvnForum Homepage Bienvenido domingo  |  Terminar sesión   
  Búsqueda  
  Indice |  Temas Recientes |  Quién Está en Línea |  Lista de Usuarios |  Mi Perfil |  Búsqueda |  Ayuda


Ir a »
Total de mensajes en este tema: 8 [Eliminar este Tema] [Mover este Tema]
[Ańadir a Mis Favoritos] [Ańadir un aviso a este tema] [Publicar nuevo tema]
Autor
Tema Anterior Este tema ha sido visto 112 veces y tiene 7 respuestas Tema Siguiente
Masculino odomalo
Novato



Ingresó: Feb 25, 2004
Mensajes: 28
Estado: En línea

Adjuntar archivo   Editar este mensaje   como mover la comida en el juevo de yogi sesion 15 Responder a este mensaje
Responder citando
[Eliminar este Tema]

Hola. tengo un problema a la hora de mover la comida en el juego de Yogi. En el metodo dibuja, dibujo la comida asi:

Shape clip2 = g.getClip();
g.setClip(xComida,0,SpriteComida.ANCHO,SpriteComida.ALTO);
g.drawImage(spcom.sprites, xComida - spcom.x,yCom, spcom.width, spcom.height, this);
g.setClip(clip);

Donde la variable "yCom" es la que se irá incrementando para que la comida se desplaze hacia abajo.

El caso es que en el metodo run, antes de repaint(), la incremento, con la condicion de que no llegue a valer más que la variable ALTO. Si llega a valer ALTO es que yogi no la ha cogido y por lo tanto tengo que crear otra nueva comida que empieze desde arriba del todo. hasta ahí creo que lo tengo claro, el problema es que no se mueve la comida. De hecho creo que ni siquiera el programa llega al metodo run(). Me he dado cuenta que con el sprite de yogi, cada vez que haces un movimiento con el teclado, al final de esos if else anidados, escribe un repaint() y se pinta bien. Y he pensado en hacer yo el repaint() con la comida en el mismo metodo donde creo el frame en vez de en el run(), pero tampoco me va. que estoy haciendo mal? supongo que serán bastantes cosas...
[Jul 20, 2004 5:56:41 PM] Print Post    odomalo@yahoo.es Reportar mensaje ofensivo  Ir al inicio 
Masculino odomalo
Novato



Ingresó: Feb 25, 2004
Mensajes: 28
Estado: En línea

Adjuntar archivo   Editar este mensaje   Re: como mover la comida en el juevo de yogi sesion 15 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

ya he conseguido que se muevan, tenia que poner t.start(), iniciar el hilo, supongo que será así. Lo que pasa es que ahora cuando se cumple la condicion para que la Y de la comida llegue al suelo, es decir cuando sea igual que ALTO, no se ¿como hacer para que vuelva al metodo Yogi y vuelva a crear otra comida? También sucede que la comida, al descender un poco, desaparace detras del fondo, como si lo tapara una cortina, y siempre desaparace en el mismo sitio. a veces si le recorto la coordenada Y para que se desplace poco, se queda cortada por la mitad, una mitad se ve y la otra está escondida detras del fondo, esto por que es?
[Jul 20, 2004 11:24:37 PM] Print Post    odomalo@yahoo.es Reportar mensaje ofensivo  Ir al inicio 
Masculino nacho
Miembro



Ingresó: Feb 1, 2004
Mensajes: 63
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: como mover la comida en el juevo de yogi sesion 15 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Bueno, sobre la primera duda (la del t.start()) ya está el problema resuelto

smile

Sobre lo de cómo hacer para que cree otra comida, es sencillo: una vez que la comida toque el suelo, reasignas el sprite "spcom" a otra comida, y le pones la yCom a 0 de nuevo:

yCom = 0;
spcom = new SpriteComida(...) // O como lo hayas llamado.

Sobre lo de que te "desaparece" la comida en ciertas zonas de bajada, es raro. Asegúrate de que el orden en que dibujas los elementos es el adecuado: dibuja primero lo que quieras que se quede detrás. También asegúrate de que el setClip lo haces bien, por si lo defines algo por encima, o algo más estrecho, y eso hace que se te dibuje sólo una parte de la comida (lo que quede fuera del clip no se verá).

Una curiosidad más: la comida no debería desaparecer cuando su yCom sea igual a ALTO, sino cuando fuese igual a ALTO - SpriteComida.ALTO (es decir, cuando el borde inferior de la comida toque el suelo), porque si no te desaparecerá la comida por debajo de la pantalla, no?
[Jul 21, 2004 1:06:41 AM] Print Post    iiborra@dccia.ua.es Reportar mensaje ofensivo  Ir al inicio 
Masculino odomalo
Novato



Ingresó: Feb 25, 2004
Mensajes: 28
Estado: En línea

Adjuntar archivo   Editar este mensaje   Re: como mover la comida en el juevo de yogi sesion 15 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

La comida ya se me ve bien, era cuestion de arreglar el setClip. El problema ahora está en que en el run, cuando la comida a tocado suelo, ya dejan de haber movimientos en la pantalla, no puedo mover a yogi ni se genera otra comida ni nada, estoy convencido que es problema del run, lo he hecho así:

public void run()
{
while(yComida<(ALTO-SpriteComida.ALTO))
{
yComida++;
repaint();
if(yComida== ALTO-SpriteComida.ALTO)
{
comidaFinal=true;
}
try
{
Thread.currentThread().sleep(25);
} catch (Exception e) {}
}
}

Quizá tendría que poner otra condicion en el while y poner otro while dentro con esa condición?
[Jul 21, 2004 10:17:46 AM] Print Post    odomalo@yahoo.es Reportar mensaje ofensivo  Ir al inicio 
Masculino odomalo
Novato



Ingresó: Feb 25, 2004
Mensajes: 28
Estado: En línea

Adjuntar archivo   Editar este mensaje   Re: como mover la comida en el juevo de yogi sesion 15 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

He conseguido hacer que el run vaya bien, lo he hecho de esta manera:
public void run()
{
while(true)
{
if(yComida<=(ALTO-SpriteComida.ALTO))
{
yComida++;
repaint();
if(yComida== ALTO-SpriteComida.ALTO)
{
yComida=0;
numVidas--;
xComida = (int)(Math.random()*(ANCHO-25));
spcom= new SpriteComida();
numFrameCom = (int)(Math.random()*3);
spcom.setFrame(numFrameCom);

comidaFinal=true;
}
}
try....

Lo que ocurre es que no me cambia de alimento, la coordenada X si la cambia y la tarta sale cada vez de un sitio diferente, pero siempre sale la tarta.
Y otra cosa, la logica del programa hay que hacerla en el run? es decir, lo de descontar las vidas, sumar los puntos, comprobar cuando yogi coge una comida, finalizar el juego...
[Jul 21, 2004 10:42:09 AM] Print Post    odomalo@yahoo.es Reportar mensaje ofensivo  Ir al inicio 
Masculino nacho
Miembro



Ingresó: Feb 1, 2004
Mensajes: 63
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: como mover la comida en el juevo de yogi sesion 15 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Hola.

Es mejor que toda la lógica vaya en el "run", ya que es el run quien actualiza cada paso del juego, y si no podrías tener un comportamiento asíncrono.

Lo de que no te cambie de comida, debe ser problema de la clase SpriteComida que tengas hecha. Asegúrate de que tienes un método setFrame que verdaderamente elija una comida diferente, y cambie bien la coordenada X dentro de la imagen para coger un sprite u otro. Asegúrate también de que, desde el juego, generas un número distinto cada vez, para poder elegir una comida diferente. Si no te funciona bien el "Math.random()", utiliza la clase java.util.Random, que está para eso:

java.util.Random r = new java.util.Random();
int frame = r.nextInt(3);
[Jul 21, 2004 11:59:24 AM] Print Post    iiborra@dccia.ua.es Reportar mensaje ofensivo  Ir al inicio 
Femenino jabp
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 7
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: como mover la comida en el juevo de yogi sesion 15 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Hola. "Adomalo" me pasa lo mismo que te pasaba a ti, la comida se mete cuando baja muy poco detras del fondo. ¿Como dices que lo has solucionado?

Gracias
[Jul 21, 2004 4:26:42 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Femenino jabp
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 7
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: como mover la comida en el juevo de yogi sesion 15 Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Problema solucionado, era una tonteria.
[Jul 21, 2004 5:07:12 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
[Versión imprimible] [Publicar nuevo tema]