Noviembre 23, 2011, 01:31:33 PM Ultima modificación: Noviembre 23, 2011, 01:42:27 PM por kaliman777
Hola comunidad:

En algunos juegos cada vez que se gana puntos, estos se dibujan y salen flotando hacia arriba y desaparecen antes de salir de la room. Hace m?s de un a?o alguien puso un engine as? y no lo encuentro.

?Me pueden dar alguna pista, por favor o decirme c?mo logro este efecto?

Gracias. ;D
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

#1 Noviembre 23, 2011, 02:13:24 PM Ultima modificación: Noviembre 23, 2011, 02:27:20 PM por klys
Es sencillo, lo eh hecho varias veces.

Vamos a necesitar solo lo siguiente: 1 objecto, una fuente y 2 script

Primer Objecto: (llamalo como quieras)
Creas un cola, esa cola es la que va a evitar que muchos n?meros se acumulen al mismo tiempo y luego no se entienda nada.



Comenzamos asi:
[gml]
// este va en el objecto donde quieras que salgan los numeros
// Create Event (objecto para todos)
colanumeros = s_queque_create();
colacolor = d_queque_create();
desencolando = 0
//fijese que solo le quitamos el global.[/gml]

En otro OBJETO:"o_marq_v" configuras lo siguiente:

[gml]// Create Event:
speed = -5; // esta es la rapidez con la que volara hacia arriba.
alarm[0] = 30; // este es el tiempo que durara con vida. (30steps = 1seg)
text = ""; // el texto que mostrar?
color = 0; // el color del que sera ese texto volador

// draw event
draw_set_font(LaFuenteQueSeaPreferida)
draw_set_color(color)
draw_text(x,y,text) // si te da error con pasarle numeros (que no deberia) lo cambiamos por string(text)

// Alarm[0]
instance_destroy();
[/gml]


Creamos el siguiente script:

marquesiva_voladora
[gml]/*
    marquesina_voladora(text,color)
        text = puede ser un texto, un numero, o ambos concatenados
        color = solo numeros o constantes
          Ejemplo: marquesina_voladora("?SUBISTE AL NIVEL " + string(nivel) + "!",c_yellow)
       
    by klys2007@gmail.com :D
*/

MV = instance_create(x,y,o_marq_v);
MV.text = argument0;
MV.color = argument1;[/gml]

Ahora este script:
encolar_text
[gml]
/*
   encolar_text(text,color)
        text = puede ser un texto, un numero, o ambos concatenados
        color = solo numeros o constantes
          Ejemplo: encolar_text("?SUBISTE AL NIVEL " + string(nivel) + "!",c_yellow)
       
    by klys2007@gmail.com :D
*/

ds_queue_enqueue(colanumeros,argument0)
ds_queue_enqueue(colacolor,argument1)

/*
 Tenga en cuenta que ahi dos variaciones de este script, el primero es el colanumero y el segundo es global.colanumero
 lo llamariamos al global: encolar_textg
*/
[/gml]

Ahora en el objecto donde quieras que se muestren los numeros:

[gml]
// step event
if (ds_queue_size(colanumeros) > 0) and (!desencolando)
{
  desencolando = 1;
  alarm[0] = 1;
}

// Alarm[0] o la que este disponible para tu objeto
marquesina_voladora(ds_queue_dequeue(colanumeros),ds_queue_dequeue(colacolor))
if (ds_queue_size == 0) desencolando = 0;
else alarm[0] = 10; // reaparici?n del numero, debe ser sincronizado con la speed de o_marq_v
[/gml]


Ahora para usarlo todo esto, solo tienes que llamar desde el objecto donde quieras que se muestren los numeros:

[gml]
variable = 200
encolar_text(variable,c_green)
encolar_text("GANASTE!".c_yellow)
encolar_text(-900,c_red)
encolar_text("+1",c_blue)
/*
  Si deseas que los numeros positivos muestren el + podriamos hacer lo siguiente:
  if (variable > 0)
  {
      encolar_text("+" + string(variable),c_green)
  }
  else encolar_text(variable, c_green)
*/
[/gml]


Si lo haces todo bien, te van a gustar los resultados.

Si tambi?n quieres agr?gale un par?metro mas: la fuente.

Espero te sirva :D
Battlefield Galactic (Nombre piloto) Alpha 1.7.5.0
Juego Genero: Multiplayer Online Battle Arena!
Is more than 9000 APM!!

Hola, para esto puedes crear un objeto y lo defines asi:
- debes tener en cuenta que para esto es necesario que el objeto que crea a este objeto, le debe dar un puntaje en la variable "valor"

evento create
vspeed=-2;     //esto es para q vaya subiendo
Valor=0;       //aqui guardas el valor que va a mostrar
alarm[0]=20;   //activamos una alarma para q se destruya despues de un tiempo

evento alarm[0]
instance_destroy();       //se destruye a si mismo

evento draw
draw_text(x,y,""+string(valor));  //esto dibuja el valor o el puntaje
//en este evento puedes escoger el tipo de letra, el color, o una fuente que ya tengas creada. usas esto:
draw_set_font(fuente);            //para escoger fuente creada
draw_set_color(c_yellow);         //para escoger color

-algo que me parece mejor visualmente es q este valor no desaparezca de una sino que se vaya desapareciendo poco a poco, lo puedes intentar tambien.

si tienes mas dudas me puedes escribir por mp y te ayudo


Wow!! hay respuestas para todos los gustos. Tratar? de aplicarlas y ver cual es la mejor combinaci?n. Gracias mil.

Clys: tus c?digos son grandiosos, pero tan f?cil de aplicar no creo, podr?as hacerme un miniengine con ellos? Se me confunde la t?cnica XD.

La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

Bueno prueba esto,creo que te refieres se vea el score a la parte de arriba:
no te entendi muy bien  :-[
1? crear un objeto
2? clicar en el evento draw del objeto i poner este script
[gml]x=view_xview[0]+20y=view_yview[0]-40 draw_text(x,y,score)[/gml]
(puede que para que te funcione debas cambiar los valores i la x,y)

Te hice un ejemplo en GM8 de lo que quieres, es facil.

Lo unico que yo lo hice con monedas, cuando las tocas van subiendo y cuando llegan al tope (Que yo les puse en el sprite) se destruyen y te dan puntos.

Revisalo y cualquier cosa me preguntas.

Disculpa la tardanse, aqui esta tu merecido implementacion...

Cometi varios errores de tipeo en los codigos de arriba, pero en el ejemplo esta todo bien.

con A muestras un numero aleatorio, dejalo presionado para ver mejor su rendimiento en cuanto a gran cantidad de numeros.

Con N muestras un numero dado por ti, y con L muestras un texto escrito por ti.

Todos con diferentes colores.

:)

Por cierto, en cada texto que tengas en draw event de cualquier otro objecto debes ponerle lo siguiente: draw_set_alpha(1)

de esa forma este objecto no interferira con el alpha de todos los textos en pantalla.

http://dl.dropbox.com/u/33603247/Ejemplo%20Marquesina%20Voladora.gmk
Battlefield Galactic (Nombre piloto) Alpha 1.7.5.0
Juego Genero: Multiplayer Online Battle Arena!
Is more than 9000 APM!!

Cita de: klys en Noviembre 24, 2011, 01:20:11 AM
Disculpa la tardanse, aqui esta tu merecido implementacion...

Cometi varios errores de tipeo en los codigos de arriba, pero en el ejemplo esta todo bien.

con A muestras un numero aleatorio, dejalo presionado para ver mejor su rendimiento en cuanto a gran cantidad de numeros.

Con N muestras un numero dado por ti, y con L muestras un texto escrito por ti.

Todos con diferentes colores.

:)

Por cierto, en cada texto que tengas en draw event de cualquier otro objecto debes ponerle lo siguiente: draw_set_alpha(1)

de esa forma este objecto no interferira con el alpha de todos los textos en pantalla.

http://dl.dropbox.com/u/33603247/Ejemplo%20Marquesina%20Voladora.gmk
Gracias a todos por ser colaboradores, me sirve este ejemplo.
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.