Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Mi objeto desaparece cuando uso el evento Draw  (Leído 1088 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Samigabacho

  • Habitual
  • *
  • Puntos: 65
  • Mensajes: 54
  • Sexo: Masculino
  • Sólo a mi me pudo tocar ser yo!
    • Ver Perfil
en: Noviembre 02, 2012, 08:17:17 pm
Hola a todos,
tengo un problema que la verdad no lo entiendo ni a la de 3.
He creado un sprite de un pequeño marcador, y un objeto con dicho sprite.
Cuando lo coloco en la room sin nada más, mi instancia se muestra en el juego. Pero en el momento en el que le añado un evento draw para pintar la puntuación desaparece el objeto y sólo aparece la puntuación.

if(score<-40){draw_set_color(make_color_rgb(255,100, 100))}
if(score<0){draw_set_color(make_color_rgb(255,150, 150))}
if(score>=50){draw_set_color(make_color_rgb(255,255, 255))}
if(score>=100){ draw_set_color(make_color_rgb(200,255, 255))}
if(score>=200){ draw_set_color(make_color_rgb(150,255, 255))}
if(score>=300){ draw_set_color(make_color_rgb(100,255, 255))}
if(score>=400){ draw_set_color(make_color_rgb(50,255, 255))}
if(score>=500){ draw_set_color(make_color_rgb(0,255, 255))}
draw_set_font(font0)
draw_text(x,y,"Puntos: "+string(score))

Alguien sabe porqué puede estar pasando esto?

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Mgbu

  • Okupa
  • *
  • Puntos: 548
  • Mensajes: 817
  • Sexo: Masculino
  • Hola! (?)
    • Ver Perfil
Respuesta #1 en: Noviembre 02, 2012, 08:46:32 pm
Es así, no se porqué pero es normal. Vas a tener que agregar
Código: [Seleccionar]
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha)
Estpo no está en un FAQ? habría que agregarlo :D

El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy

 


Desconectado Samigabacho

  • Habitual
  • *
  • Puntos: 65
  • Mensajes: 54
  • Sexo: Masculino
  • Sólo a mi me pudo tocar ser yo!
    • Ver Perfil
Respuesta #2 en: Noviembre 02, 2012, 09:19:09 pm
No lo entiendo amigo Mgbu, es algo que suele pasar? cuando pintas con Draw desaparece la instancia del objeto que ya has puesto en la room?

Acabo de agregar tal y como me has sugerido

draw_sprite_ext(1,spr_marcador,x,y,1,1,0,0,0)

al comienzo de el evento Draw y nada
« última modificación: Noviembre 02, 2012, 09:25:27 pm por Samigabacho »

 


Desconectado pikamaker

  • Asiduo
  • *
  • Puntos: 101
  • Mensajes: 122
  • Sexo: Masculino
    • Ver Perfil
Respuesta #3 en: Noviembre 02, 2012, 09:27:12 pm
con draw lo que haces es dibujar un objeto (podes dibujarle un sprite con el codigo que te dio mgbu)
y con image_index le asignas una imagen que lo representa
al usar draw se inhabilitan los image_index y solo se ve lo que esta dibujado con draw


Desconectado penumbra

Respuesta #4 en: Noviembre 02, 2012, 09:31:33 pm
No tengo mucha experiencia, a ver si alguien más ducho nos aclara esto, pero hasta donde sé, una vez que pones código en el evento Draw del objeto "A", GM te obliga a que todas las rutinas o funciones que tengan que ver con dibujo en pantalla, las manejes en draw (es decir, que las saques de STEP). Por eso tienes que usar draw_sprite_ext para dibujar en DRAW

Aquí es donde es útil usar un objeto controlador para el juego, digamos objeto "B", el cual no tiene asociado ningun sprite. Este nuevo objeto se encargará de desplegar ese marcador (piensa que el marcador es algo más global o general para tu juego, y no debe ser manejado por "A"). Así que el controlador dibuja (en DRAW) el score, y te permite seguir usando funciones de dibujo 'más locales' en el evento STEP de "A". Obviamente el objeto controlador puede encargarse de otras tareas relacionadas con otros objetos que tengas en tu juego. No sé si me expliqué bien o si estoy en lo correcto, pero de momento eso me ha funcionado a mi
« última modificación: Noviembre 02, 2012, 09:33:17 pm por penumbra »

 


Desconectado Samigabacho

  • Habitual
  • *
  • Puntos: 65
  • Mensajes: 54
  • Sexo: Masculino
  • Sólo a mi me pudo tocar ser yo!
    • Ver Perfil
Respuesta #5 en: Noviembre 02, 2012, 09:34:14 pm
Muchas gracias! no tenia ni idea.... :-[ :'(
En verdad pintaba el marcador con un objeto controlador, pero cuando puse la imagen del marcador en un objeto pensé... pues porqué no poner el código que controla lo que se escribe en el marcador en el mismo objeto responsable....

 


Desconectado Mgbu

  • Okupa
  • *
  • Puntos: 548
  • Mensajes: 817
  • Sexo: Masculino
  • Hola! (?)
    • Ver Perfil
Respuesta #6 en: Noviembre 03, 2012, 03:13:51 pm
Es como te explico penumbra
Probá pegar el código tal como te lo di, en los argumentos puse todas variables ajustadas automaticamente por el juego, entonces ese codigo funciona tal como esta para todos los objetos.
Bueno, si usas GM8.1 existe draw_self que hace exactamente lo mismo

El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy

 


Desconectado Texic

  • Moderadores globales
  • Legendario
  • *
  • Puntos: 1213
  • Mensajes: 2.158
  • Agradecido: 3 veces
  • Sexo: Masculino
  • I Have The Fire!
    • Ver Perfil
Respuesta #7 en: Noviembre 03, 2012, 08:03:56 pm
Les explico como funciona. TODO objeto tiene una función draw aunque no la usen, en la que se dibuja a sí mismo (con el código q dió mgbu básicamente). Al crear el evento draw eso deja de funcionar y el objeto sólo dibuja lo que haya en el evento draw. Si quieren que se siga dibujando a sí mismo sólo es cuestión de agregar el código que dió mgbu y listo




 


Desconectado Johann

  • Las cosas como son!
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 762
  • Mensajes: 872
  • Agradecido: 121 veces
  • Sexo: Masculino
  • First Class Soldier... 10 años en CGM, 5 como mod
    • Ver Perfil
Respuesta #8 en: Noviembre 03, 2012, 08:18:10 pm
A la linea de codigo:
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha)
se le denomina evento draw por defecto o predeterminado, esto lo dice uno de los consejos aleatorios que estan por ahi, al agregar un evento draw a un objeto, este se sobreescribe (o como en otros lenguajes de programacion @override) y se hace necesario llamarlo explicitamente, de la forma que ha dicho Texic.

Cita de: Fenris78
Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: Calio
Somos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.
 


Desconectado the_blade

  • Adicto
  • *
  • Puntos: 521
  • Mensajes: 323
  • Sexo: Masculino
    • Ver Perfil
    • ImpactAR GAmes Entertainment WEB
Respuesta #9 en: Noviembre 03, 2012, 10:58:02 pm
hola Samigabacho, te hago dos correcciones por las cuales no te dibujaba el sprite del objeto acorde al codigo que dijistes que utilizastes:
Código: [Seleccionar]
draw_sprite_ext(1,spr_marcador,x,y,1,1,0,0,0)en primer lugar en el primer argumento donde pusistes 1, va el nombre del sprite no el numero, por ejemplo, spr_caja, y en el seguno el numero de subimagen, si quieres reproducir todo va -1, y la segunda correccion por la cual por mas que ubieras puesto bien el nombre del sprite es que en el ultimo argumento colocastes 0, en dicho argunmento estableces el alpha o transparencia, al colocar 0 lo haces invisible, debes poner 1.-
salu2 y suerte.-