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

1486
Eso sucede cuando el código se coloca en un evento colisión con un objeto sólido y cuando se usa move_contact_solid, he intentado determinar cuál es la causa exacta de ese fallo pero aún no lo consigo, me imagino que se debe, en parte, a que la colisión con un sólido regresa a la instancia a su posición anterior y la función presenta algunos errores. Una solución puede ser usar la función place_meeting (en el evento Step) en vez del evento colisión.
1487
En vez de usar el script que escribe en el archivo, mete el object_index en una matriz, ejemplo:
[gml]
var Id,X,Y;

for( Y=0; Y<room_height; Y+=32 )
{
    for( X=0; X<room_width; X+=32)
    {
        Id = collision_point( X,Y, all,1,0 );
        if instance_exists(Id) Matriz[X,Y] = Id.object_index;
    }
}
[/gml]
Si los objetos están alineados, puedes usar la función instance_position en vez de collision_point.
1488
Para mostrar la tabla escribe [gml]highscore_show( score );[/gml], si la puntuación actual merece estar en la tabla aparece un cuadro para escribir el nombre. También están las funciones highscore_show_ext y draw_highscore.

Para agregar elementos a la tabla, sin mostrarla, usa las funciones highscore_add y highscore_add_current.

Los nombre que ya están están en la tabla no se pueden modificar, sólo se pueden leer, o se puede borrar la tabla por completo.
1489
Yo guardaría la secuencia de objetos en un arreglo y usaría un contador de toques, entonces el contador se inicia en cero y al presionar un objeto se combrueba si su object_index es igual al elemento cero del arreglo, si es igual, el contador se incrementa, y si no es igual, aparece el enemigo y se reinicia el contador.
1490
Con éstos códigos se pueden cambiar las instancias de un objeto, cuyo número cambia, por instancias de otro objeto de forma aleatoria. Se usa el mismo principio que en las versiones anteriores, pero esta vez la lista se actualiza en el evento Alarm0.
[gml]
///Create
lista = ds_list_create(); //crear lista
alarm[0] = 20 * room_speed; //contar 20 segundos
[/gml]
[gml]
///Alarm0
if( instance_number(obj_manzana1) > 0 ) //si hay instancias que cambiar
{
    ds_list_clear( lista ); //limpiar lista
    with( obj_manzana1 ) ds_list_add( other.lista, id ); //actualizar lista
    ds_list_shuffle( lista ); //desordenar elementos de la lista
    with( ds_list_find_value(lista,0) ) instance_change( obj_manzana2, false ); //cambiar objeto
    alarm[0] = 20 * room_speed; //contar 20 segundos
}
[/gml]
No entiendo a qué te refieres con la explosión, no has explicado sobre eso.
1491
Aquí está otra versión con menos variables.
[gml]
///Evento Create
lista = ds_list_create();
with( obj_manzana ) ds_list_add( other.lista, id );
ds_list_shuffle( lista );
k = 0;
alarm[0] = 20 * room_speed;
[/gml]
[gml]
///Evento Alarm0
(ds_list_find_value( lista, k )).sprite_index = spr_verde;
k++;
if( k < 20 ) alarm[0] = 20 * room_speed;
[/gml]
1492
Este es un método que usa una lista y la función instance_find.
En un objeto controlador, en el evento Create, se crea una lista de números aleatorios y se inicializa una alarma:
[gml]
lista = ds_list_create(); //crear lista
for( i=0; i<20; i++ ) ds_list_add( lista, i ); //agregar números del 0 al 19
ds_list_shuffle( lista ); //desordenar los números

k = 0; //variable para contar las manzanas que se han cambiado

alarm[0] = 20 * room_speed; //contar 20 segundos
[/gml]
Se supone que las instancias del objeto manzana no se van creando ni destruyendo, ya están ahí cuando inicia la room.
Después en el evento Alarm0 del objeto controlador se cambia de color a una manzana:
[gml]
n = ds_list_find_value( lista, k ); //leer un número de la lista
instancia = instance_find( obj_manzana, n ); //obtener el id de una manzana aleatoria
instancia.sprite_index = spr_verde; //cambiar el sprite de esa manzana

k++; //incrementar el contador
if( k < 20 ) //si el contador es menor al total de manzanas
alarm[0] = 20 * room_speed; //contar otros 20 segundos
[/gml]
Aquí se cambia el srpite de la manzana, pero se pueden usar vario métodos para hacer lo mismo, como cambiar la variable image_index, cambiar image_blend o usar otra variable personalizada.

Eso es todo, hasta luego.
1493
Preguntas y respuestas / Re:problema con el mouser
Enero 13, 2015, 04:37:17 AM
Crea una variable que indique cuando el ratón debe mover la cámara o mover el cursor del menú, o puedes usar la variable cursor_sprite para poner un cursor personalizado; si  cursor_sprite == -1 (no tiene sprite asignado) el ratón debe controlar la cámara, si tiene otro valor debe controlar el menú, todos los objetos que se controlen con el ratón deberán revisar esa variable con if antes de ejecutar el código.
1494
¿Las manzanas cambiarán en orden aleatorio?
1495
Aunque no generes modelos, te recomiendo que uses el "Model Creator" para experimentar con el orden de los vértices. Usé el programa para copiar tu dibujo, dejo una imagen adjunta con el orden de los vértices.
1496
Dentro del evento suma un valor a vspeed, ejemplo: [gml]vspeed += 0.4;[/gml]
1497
Sólo asigna la variable speed, ejemplo: [gml]speed = 5;[/gml]
También puedes usar las variables vspeed y hspeed, o las funciones motion_set y motion_add.
1498
La cara frontal de un triángulo tiene los vértices en sentido horario (clockwise), y no en sentido antihorario (counter clockwise), en tu figura todos los triángulos ven para abajo, aunque la normal apunte hacia arriba. Para arreglalo puedes invertir el orden de los vértices en el código, que los primeros sean lo últimos y los últimos sean los primeros.

Si definiste las normales para usar iluminación, debes hacer que el vector normal sea unitario, porque si no los objetos se iluminan de forma extraña.

Para entender mejor cómo se dibujan las primitivas usa el programa "Model Creator" http://www.comunidadgm.org/juegos-completos/model-creator-esp-(utilidad-3d)/, y puede ser mejor usar modelos en vez de primitivas porque se dibujan más rápido.
1499
La versión 1.1 no puede importar proyectos de las versiones 1.3 en adelante.
1500
Ese juego se puede implementar usando surfaces, el pincel dibujaría directamente a la surface, y la surface se mostraría en el evento Draw. La surface acumula todo lo dibujado sin tener que crear tantas instancias.