Hola a todos,
intento que como el asunto de mi pregunta indica, la puntuación se escriba en diferentes colores dependiendo de la cantidad de puntos que se estén haciendo.
En principio pensaba que sería fácil y que no tendría mucho problema e hice algo así:

[gml]if (variable_global_get("score")<50){
    draw_set_font(font0);
    draw_set_color(c_white);
    draw_text(256,450,"Puntos: "+string(score));
    draw_rectangle(250,450,380,475,1)
}
if (variable_global_get("score")>50 and variable_global_get("score")<100){
    draw_set_font(font0);
    draw_set_color(c_gray);
    draw_text(256,450,"Puntos: "+string(score));
    draw_rectangle(250,450,380,475,1)
}
if (variable_global_get("score")>100 and variable_global_get("score")<150){
    draw_set_font(font0);
    draw_set_color(c_blue);
    draw_text(256,450,"Puntos: "+string(score));
    draw_rectangle(250,450,380,475,1)
}[/gml]

Pero siempre me aparece la puntuación en blanco.

Después intenté hacerlo con un switch, aunque no se si esta estructura te permite evaluar expresiones lógicas en los casos

[gml]
switch (variable_global_get("score")){
    //
    case (variable_global_get("score")<50):
     draw_set_font(font0);
    draw_set_color(c_white);
    draw_text(256,450,"Puntos: "+string(score));
    draw_rectangle(250,450,380,475,1)
    break;
case (variable_global_get("score")>50 and variable_global_get("score")<100):
    draw_set_font(font0);
    draw_set_color(c_gray);
    draw_text(256,450,"Puntos: "+string(score));
    draw_rectangle(250,450,380,475,1)
    break;
case (variable_global_get("score")>100 and variable_global_get("score")<150):
    draw_set_font(font0);
    draw_set_color(c_blue);
    draw_text(256,450,"Puntos: "+string(score));
    draw_rectangle(250,450,380,475,1)
    break;[/gml]

Pero también se queda en blanco. Seguro que debe de ser una tontería pero no soy capaz de dar con ellos.

Aunque esto es una segunda pregunta, creo que al estar presente en el código de la primera pregunta podría entrar en el lote, si infrinjo la norma, por favor decirlo y borro esta parte :D ahí voy...

Si draw_rectangle lo hago para que esté pintado por dentro, es decir, que no sea solo el borde, qué debo hacer para sobre pintar la puntuación encima de manera superpuesta al fondo del rectángulo
Gracias.

Quizás el problema sea con variable_global_get("") ya que generalmente busca variables depositadas en el "contenedor" global, si estas usando la variable interna score no se necesita el variable_global_get

PD: no recomiendo variable_[local/global]_[get/set] son demasiado lentas  ;)

Lo siento compañero, pero cambiando por score sigue sin funcionar.
Es como si saliera de  switch  porque al primer disparo que hago ganando puntos deja de pintar.

#3 Octubre 31, 2012, 08:35:11 PM Ultima modificación: Octubre 31, 2012, 08:42:50 PM por penumbra
1. Tengo entendido que no se pueden usar esas comparaciones con operadores lógicos en la estructura CASE, únicamente puedes comparar contra un solo valor.

2. Si te fijas bien, el script no define qué pasa cuando el valor del score es exactamente igual a 50 o 100. Es probable que el score nunca tenga esos valores, dependiendo de tu juego, pero esto puede ocasionar sorpresas.

3. En la primera condición, cuando el score es menor a 50, qué pasa si cambias el color de blanco a azul?

#4 Octubre 31, 2012, 10:17:52 PM Ultima modificación: Octubre 31, 2012, 10:20:36 PM por elviskelley
Asi....

if (score <= 50)
{
    draw_set_font(font0);
    draw_set_color(c_white);
    draw_text(256,450,"Puntos: "+string(score));
    draw_rectangle(250,450,380,475,1)
}
else
if (score > 50 and score <100)
{
    draw_set_font(font0);
    draw_set_color(c_gray);
    draw_text(256,450,"Puntos: "+string(score));
    draw_rectangle(250,450,380,475,1)
}
else
if (score >= 100 and score <150)
{
    draw_set_font(font0);
    draw_set_color(c_blue);
    draw_text(256,450,"Puntos: "+string(score));
    draw_rectangle(250,450,380,475,1)
}

No es necesario poner todo el bloque en cada if, solo el cambio de color y despues dibujar lo demás:

[gml]draw_set_color(c_white)
if(score>=50)
     draw_set_color(c_gray)
if(score>=100)
     draw_set_color(c_blue)

draw_set_font(font0)
draw_text(256,450,"Puntos: "+string(score))
draw_rectangle(250,450,380,475,1)[/gml]

Saludos

#6 Noviembre 02, 2012, 01:39:00 PM Ultima modificación: Noviembre 02, 2012, 01:44:43 PM por Samigabacho
uau! muchas gracias por la ayuda... voy a probar
Gracias!

Nadie tiene sabe cómo hacer esto?

CitarSi draw_rectangle lo hago para que esté pintado por dentro, es decir, que no sea solo el borde, qué debo hacer para sobre pintar la puntuación encima de manera superpuesta al fondo del rectángulo
Gracias.

Cita de: Samigabacho en Noviembre 02, 2012, 01:39:00 PM
uau! muchas gracias por la ayuda... voy a probar
Gracias!

Nadie tiene sabe cómo hacer esto?

CitarSi draw_rectangle lo hago para que esté pintado por dentro, es decir, que no sea solo el borde, qué debo hacer para sobre pintar la puntuación encima de manera superpuesta al fondo del rectángulo
Gracias.

Debes manejarte con los valores de Depth.

`•.¸¸.•´´¯`••._.•(Algunos se divierten jugando,)•.¸¸.•´´¯`••._.•
`•.¸¸.•´´¯`••._.•(yo me divierto creando juegos.)•.¸¸.•´´¯`••._.•

CitarDebes manejarte con los valores de Depth.
Pero las dos funciones de dibujado (draw_text y draw_rectangle) se hacen desde el mismo objeto, que tiene la misma profundidad "Depth".

Unas sola pregunta por tema, pero basicamente lo que pongas primero se dibuja primero (de atras hacia adelante).