Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - bygdle

391
Intenta hacer esto:

En el evento Create, declara una variable que almacenará el sprite anterior:
[gml]
///Evento Create
sprite_index_prev = sprite_index;
[/gml]
Luego, en End Step, actualiza la variable.
[gml]
///Evento End Step
sprite_index_prev = sprite_index;
[/gml]
Y en Step, compruebas el sprite actual con el anterior, y si son diferentes (si el sprite recién se ha cambiado), reiniciar image_index:
[gml]
if(sprite_index <> sprite_index_prev)
    image_index = 0;
[/gml]
393
Lo dudo :{. Antes de ejecutar el código que mostré en Draw, establezco Qdraw a 0, y por ello sí que dibuja en pantalla la pregunta en sí, pero no lo hace con las respuestas D:.
394
Hola buenas :3
Verán, comencé a hacer un programa tipo quiz, una especie de preguntas y respuestas que hace uso de rejillas dinámicas para almacenar las mismas, pero no sé que ocurre que cuando añado un arreglo a un campo de la ds_grid, no soy capaz de recogerlo después, me devuelve undefined. Así tengo mi proyecto:

Primero tengo un script que crea arreglos con los argumentos, para facilitarme el trabajo:
[gml]
///array(val0, ..., val15);
var s;
for(var i = 0; i < argument_count; i++)
    s = argument;
return s;
[/gml]
Lo más fácil sería pensar que el error está acá y que desde un principio ningún arreglo se guarda, pero no veo ningún error en el código :vv.

Después tengo el evento create del controlador de las preguntas, con esto:
[gml]
globalvar Q, Qshow, page;
Q = ds_grid_create(4, 1);
Q[#0, 0] = "La pregunta :v";
Q[#0, 1] = array(
    "La respuesta A",
    "La respuesta B",
    "La respuesta C",
    "La respuesta D"
);
Q[#0, 2] = 2; //respuesta correcta: C
Q[#0, 3] = false; //No respondida

page  = 0;
Qshow = -1;
[/gml]
Bien, la variable Q es la rejilla que contendrá los datos. Para probar le puse una sola fila, pero siempre tiene 4 columnas: La pregunta, las respuestas, la respuesta correcta y si se ha respondido o no. Las variables page y Qshow son para mostrar la pregunta; page no es relevante, pero Qshow almacena el índice de la pregunta a mostrar, en este caso valdrá 0 (porque sólo hay una pregunta).

Ahora bien, nos vamos al evento Draw:
[gml]
TextExt(room_width/2, 280, Q[#Qshow, 0], 704, 28, 0.5, 0);
h = string_height_ext(Q[#Qshow, 0], 28, 704) / 2;
r = Q[#Qshow, 1];
for(var i = 0; i < array_length_1d(r); i++)
{
    Text(608, 280 + h + 32*i, r, 0.5, 0);
}
[/gml]
Los scripts TextExt() y Text() tampoco importan, son sólo para dibujar el texto en pantalla; háganles caso omiso :v. La variable h también es correcta, hasta ahí todo bien, la pregunta se dibuja correctamente en pantalla. El problema viene con la variable r: El ciclo que debería dibujar las posibles respuestas no se ejecuta nunca, y si muestro con un emergente el valor de r, me aparece undefined.

No tengo idea de por qué sucede esto, ¿alguna idea? ¿es problema de las grids, que casualmente no admitan arreglos (con lo cual tendría que reescribir mucho código >.<)? ¿o es error mío en alguna parte (ojalá sea así :v) que no he visto?

EDITO: Intenté cambiar los arreglos por listas, pero el error sigue sucediendo exactamente igual. Comprobé que el script funcionaba bien insertanto la misma lista en otra variable cualquiera, y al mostrarla en pantalla sí devolvía el identificador de la lista y no undefined, como sucede cuando la guardo en la rejilla >.<".

Espero haberme explicado bien xD.
Gracias por leer, saludos :}
395
Preguntas y respuestas / Re:Problema con animaciones
Junio 02, 2017, 06:19:26 AM
No veo ningún error. Tal vez el fallo se produzca en otra parte, tendrías que revisar más a fondo tu código.
396
Pos raios, no leí :v xdxd
397
¿ya no habías preguntado lo mismo? Recuerdo haberte pasado un enlace en otro post igual
398
Ya esa función no existe :v
Tendrías que usar sprite_create_from_surface(), y usar la application_surface.
399
Preguntas y respuestas / Re:Pregunta avanzada de GML
Junio 01, 2017, 03:09:02 AM
Quizás algo así:
[gml]
variable = 0
cbloque  = instance_place(x, y+96, bloque);
if(instance_exists(cbloque))
{
   variable += cbloque.variable + 1
}
else
{
   variable = 0
}
[/gml]
400
Podrías usar una surface, y ampliar su escala cuando la vayas a mostrar en pantalla.
401
Intenta usar una view, y las variables view_hview y view_wview.
402
Y la causa es prácticamente la misma. Intenta jugar con la variable image_speed.
403
¡Es GMS2!  :o :o
En fin, el error es porque al presionar la tecla izquierda defines su velocidad, pero ésta se mantiene y por eso el personaje sigue moviéndose. Tienes dos opciones: Agregar un evento Key release (o como se llame en GMS2 xd) y ahí establecer hspeed = 0, o bien simplemente reemplazar la línea de [gml]hspeed = -1.2[/gml] por [gml]x -= 1.2[/gml]para que en vez de la velocidad modifique directamente su posición.
404
Preguntas y respuestas / Re:ALMACENAR DISCOS
Mayo 29, 2017, 07:35:57 PM
El error -probablemente- está aquí:
[gml]
for(i=45;i<BOLSILLO_MAXIMO;i++)
{
    if (DISCO==false) //Desde aquí
    {
        i++;
    } //Hasta aquí :v
   
    if (DISCO==true)
    {
        DISCO_CARGADO = i;
        CODIGO_CARGADO = CODIGO;
    }
}
[/gml]
Si la primera condición se ejecuta, se sumará 1 a i y se avanzará el ciclo. El problema viene después, cuando la siguiente iteración se inicia, la misma operación del ciclo vuelve a sumar 1 a i, y eso hace que se salga del límite del arreglo. Puedes intentar modificarlo así:
[gml]
for(i=45;i<BOLSILLO_MAXIMO;i++)
{

    if (DISCO)
    {
        DISCO_CARGADO = i;
        CODIGO_CARGADO = CODIGO;
    }
}
[/gml]
Sencillito, sólo eliminas la primera condición.
405
Preguntas y respuestas / Re:ALMACENAR DISCOS
Mayo 29, 2017, 01:37:11 AM
¿Y si usas mapas? Tal vez te sea más sencillo
[gml]
///Evento create del objeto inventario
global.discos = ds_map_create();

///Evento create del objeto disco
disco_id = instance_number(obj_disco);

///Evento de colisión del disco con el jugador (o lo que sea xd)
if (bandera_sonar)
{
    audio_play_sound(soundDISKETERA_PASANDO, 1, 0);
    bandera_sonar = false;
}

global.discos[? disco_id] = mi_codigo; //la variable 'mi_codigo' es la información del disco
[/gml]
Y cuando quieras mostrar en pantalla cada código de disco con su respectiva información, harías algo así:
[gml]
///Evento draw del inventario
num = ds_map_size(global.discos);
ide = ds_map_find_first(global.disco);
for(var i = 0; i < num; i++)
{
    draw_text(32, 32 + 32*i, string(ide) + ": " + string(global.discos[? ide]));
    ide = ds_map_find_next(global.discos, ide);
}
[/gml]
Se mostrarían en plan:
Citar
Disco N: Dato N
Disco X: Dato X
Disco Y: Dato Y