|
Indice | Temas Recientes | Quién Está en LÃnea | Lista de Usuarios | Mi Perfil | Búsqueda | Ayuda |
![]() |
mvnForum » Listar todos los foros » Foro: Curso PLJ » Tema: como mover la comida en el juevo de yogi sesion 15 |
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 |
|
![]() Novato
|
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... |
||
|
![]() Novato
|
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? |
||
|
![]() Miembro
|
Bueno, sobre la primera duda (la del t.start()) ya está el problema resuelto ![]() 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? |
||
|
![]() Novato
|
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? |
||
|
![]() Novato
|
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... |
||
|
![]() Miembro
|
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); |
||
|
![]() Extranjero
|
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 |
||
|
![]() Extranjero
|
Problema solucionado, era una tonteria. |
||
|
[Versión imprimible] [Publicar nuevo tema] |