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 - Clamud

1426
Otra propuesta es usar estructuras de datos, como mencionó ferhand, pero en vez de listas usar "queues", ya que su función es obtener los elementos en el orden que se van añadiendo.
En el evento Create cada jugador crea una queue:
[gml]
///Crear fila o cola
Q = ds_queue_create();
[/gml]
Para colocar una bomba se hace esto:
[gml]
///Crear bomba y guardar su id
ds_queue_enqueue( Q, instance_create(x,y,obBomba) );
[/gml]
Para destruir las bombas se toman algunas precauciones, por si se pueden destruir con otras bombas, u otros motivos:
[gml]
///Destruir bomba
while( not ds_queue_empty(Q) ) //mientras la fila no esté vacía
{
    bomba = ds_queue_dequeue(Q); //sacar el primer elemento
    if( instance_exists(bomba) ) //si esa bomba existe
    {
        with( bomba ) instance_destroy(); //destruir la bomba
        break; //ya no buscar otra
    }
} //si no existe, revisar el siguiente elemento
[/gml]
Y por último hay que destruir la "fila" al terminar el nivel, escribiendo esto en el evento Room End, para que en el siguiente evento Create no se acumulen filas sin usar:
[gml]
ds_queue_destroy(Q);
[/gml]
1427
Si, parece que el error está en la segunda línea, como dice arcangelcaos, deberías cambiarla por esto [gml]azar = irandom(100);[/gml]y efectivamente, un doble if equivale a un and, según un artículo que estaba leyendo http://help.yoyogames.com/entries/27617403, es recomendable usar if's anidados porque GMS no tiene un sistema de "corto circuito" (aunque, no estoy seguro, creo que eso ya lo arreglaron), pero al usar ese método el código es más difícil de leer, y también es difícil de leer por el modo en el que están escritas las llaves, deberías reorganizar el código.
1428
Probablemente el background es muy grande para las páginas de textura.
1429
Con instance_find( obj_bomba, 0 ) se obtiene el id de la primera bomba creada, si esa instancia se destruye, la función devolverá el id de la segunda y así consecutivamente.
1430
Preguntas y respuestas / Re:Aclaración con ds_list
Febrero 05, 2015, 06:58:51 PM
Eso es extraño, ¿porqué al compilar no marcó el error en el número de argumentos?

He usado un método más sencillo para obtener objetos sin repetición, el primer código quedaría así:
[gml]
///Create
list = ds_list_create();
ds_list_add( list, obj_sol );
ds_list_add( list, obj_luna );
ds_list_add( list, obj_estrella );
ds_list_add( list, obj_cometa );
ds_list_shuffle( list );
[/gml]
y el otro así:
[gml]
if( ds_list_size(list) > 0 )
{
    instance_create(100, 100, ds_list_find_value(list,0) );
    ds_list_delete( list, 0 );
}
[/gml]
1432
Para asignar un sprite al azar:
[gml]sprite_index = choose( sprite1, sprite2, sprite3 );[/gml]
y para que se vea la animación, se asigna un valor pequeño a image_speed:
[gml]image_speed = 0.2;[/gml]
1433
Postea tu proyecto aquí, a ver que se le puede mejorar.
1434
Tal vez el modo en el que estás afrontando el problema no sea el más optimo. En ese caso yo usaría un sólo objeto que contenga una matriz con los números a mostrar y otra matriz con las marcas, a parte se tendrían que crear varias matrices con los patrones que dan premios y compararlas con la matriz de marcas. Creo que no sería un algoritmo complicado, pero si serían largas piezas de código.
1435
Preguntas y respuestas / Re:Dibujar con el raton
Febrero 04, 2015, 04:35:05 AM
En el ejemplo se dibuja con draw_line_width, no se si requieras que la colisión también dependa del ancho de la línea, si no, se me ocurre que se guarden los vértices de la línea en listas y se detecte la colisión con collision_line. En otra respuesta te muestro un código de ejemplo.
1437
Preguntas y respuestas / Re:Normales normalizadas en 3D
Febrero 03, 2015, 07:30:31 PM
En el código hay unos errores, como este "++i", y falta un vértice para que se forme un triángulo, pero supongo que el código no es exactamente igual al que estás usando.

Si el modelo ya se ilumina en la forma que quieres, entonces puedes hacer que los vectores normales sean "unitarios" o "normalizados" dividiendo el mismo vector entre su módulo o longitud, en código:
[gml]
nx = cos(degtorad(i*11.25));
ny = sin(degtorad(i*11.25));
nz = 1;
modulo = point_distance_3d( 0,0,0, nx,ny,nz );
nx/=modulo;  ny/=modulo;  nz/=modulo;
d3d_vertex_normal_texture(x-50, y-50, 0, nx, ny, nz, 4, 0);
[/gml]
1438
Preguntas y respuestas / Re:Como trabajar con listas
Febrero 03, 2015, 12:39:39 AM
Desordenar los elementos es una de las funciones más útiles de las listas. Obtener números aleatorios sin repetición es fácil:
[gml]
numeros = ds_list_create(); //crear lista
for( i=1; i<=90; i+=1 ) ds_list_add( numeros, i ); //meter números del 1 al 90
ds_list_shuffle( numeros ); //desordenar

cont = 0; //para contar cuántos números se han sacado
[/gml]
Después, cada vez que necesites obtener un número de la lista, haces esto:
[gml]
if( cont < 90 )
{
    numeroaleatorio = ds_list_find_value( numeros, cont );
    cont += 1;
}
[/gml]
1439
Preguntas y respuestas / Re:Crear niebla de guerra
Febrero 02, 2015, 05:30:52 PM
Si se usan surfaces se debe diseñar un mecanismo para evitar esos errores, porque las surfaces se pueden borrar por varios motivos, usa la función surface_exists, y si la surface no existe debes volver a crearla y a dibujar todo lo que contenía.
1440
Falta que proporciones más información sobre el juego.
La forma más sencilla de evitar obstáculos es usar las funciones de "planificación de movimiento": http://docs.yoyogames.com/index.html?page=source%2Fdadiospice%2F002_reference%2Fmovement%20and%20collisions%2Fmotion%20planning%2Findex.html. Si quieres programar el sistema por ti mismo, aquí está un artículo que te puede ayudar: http://www.comunidadgm.org/articulos/pathfinding-(programaci243n)/.