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

796
Preguntas y respuestas / Re:VERIFICAR ESPACIO LIBRE
Abril 24, 2016, 06:47:36 PM
Se puede revisar pixel por pixel, como dice Niu, pero el proceso sería muy pesado y no sería recomendable que se ejecute en cada Step.

Una forma de optimizar sería realizar la comprobación en pasos más grande y al encontrar colisión ir refinando poco a poco el cálculo de la distancia. Por ejemplo, para detectar la distancia horizontal a la derecha, se comprobaría con place_free en pasos iguales a la anchura del player, después al detectar colisión, se comprobaría la posición libre en sentido contrario haciendo pasos de un pixel. Sería más óptimo si los pasos se reducen a la mitad en cada evento de detección de colisión o detección de espacio libre.

Si todos los objetos son rectángulos, creo que sería mejor usar un método que compruebe la distancia de "intervalos".
Usemos este script:
[gml]
///interA( a,b, c,d );
//Dados dos intervalos ABIERTOS (a,b) y (c,d)
//devuelve true si hay interseccion
return argument0 < argument3 and argument1 > argument2;
[/gml]
Sea (x1,y1) la posición de la esquina superior izquierda de un rectángulo y (x2,y2) la esquina contraria.

La distancia a la derecha se podría calcular así (en el objeto player):
[gml]
d = "Inf"; //distancia infinita
var t;

with( obBlock )
{
    if interA( other.y1,other.y2, y1,y2 ) //si los rectangulos se "ven" en direccion horizontal
    {
        t = x1 - other.x2; //distancia a la derecha
       
        if( t > 0 )      //si el bloque esfectivamente esta a la derecha
        if( t < d        //y la distancia es menor a otra encontrada
        or d == "Inf" ){ //o no se ha encontrado otra distancia valida
            d = t;       //la menor distancia es igual a t
        }
        else if( t == 0 ){ //si t es cero
            d = 0;         //la distancia es cero
            break;         //no es necesario seguir buscando
        }
    }
}
//d contiene el resultado
[/gml]
797
Probé el gmk y todo se dibujó como debería. Tal vez es un bug de GM o un problema de compatibilidad con Windows.


798
General / Re:Nuevo usuario del foro
Abril 20, 2016, 06:12:38 PM
Hola, bienvenido. Nos hará bien contar con vuestra experiencia.
800
Las queues pueden contener maps, porque las estructuras de datos se acceden a través de un id, que es un número entero.
[gml]
cola = ds_queue_create();

// ...

mapa = ds_map_create();
mapa[?"dato1"] = 123;
mapa[?"dato2"] = 753;
mapa[?"dato3"] = "asdf"
ds_queue_enqueue( cola, mapa );

// ...

mapa = ds_queue_dequeue( cola );
copia1 = mapa[?"dato1"];
copia2 = mapa[?"dato2"];
copia3 = mapa[?"dato3"];
ds_map_destroy( mapa );
[/gml]
801
Preguntas y respuestas / Re:Error al exportar
Abril 19, 2016, 07:02:39 PM
Aquí recomiendan editar el archivo AndroidManifest.xml
http://stackoverflow.com/questions/21946408/game-maker-build-android-application-failed-null-returned-1
Pero no tengo idea de dónde se crea. Se supone que está en %appdata%\GameMaker-Studio\Android\runner, sin embargo, no lo he encontrado.

Aquí lo resolvieron reinstalando todos los SDK
https://www.reddit.com/r/gamemaker/comments/2viw65/problem_creating_android_application/

También podrías compilar como Android YYC, para que se use el NDK.
802
Que bien, entonces sí funciona. Busqué otros sprites en la rom de SMB y encontré el de la imagen de arriba, pero aparece en una dirección diferente.
803
Preguntas y respuestas / Re:Error al exportar
Abril 18, 2016, 05:51:32 PM
Tal vez es porque la ruta tiene espacios, borra el espacio en "SDK Completo", a ver si se soluciona.
804
Creo que no texplicas, ¿te refieres a calcular la distancia entre dos rectángulos rotados y saber si hay intersección?, en ese caso, este script sí se puede usar para una parte del proceso; como sea, me diste ideas para otros scripts.
805
He usado este método para crear una matriz 8x8 con valores de 0 a 3 (números de 2 bits):
[gml]
file_bin_seek( ida, drc ); //byte inicial
for( i=0; i<16; i+=1 ) //leer 16 bytes
byte = file_bin_read_byte( ida );

k = 0; //posicion en el array de bytes

for( j=0; j<8; j+=1 ){ //capa 1
    for( i=0; i<8; i+=1 ){
        mtz[i,j] = (byte[k] >> i) & 1;
    }
    k += 1;
}
for( j=0; j<8; j+=1 ){ //capa 2
    for( i=0; i<8; i+=1 ){
        mtz[i,j] += ((byte[k] >> i) & 1) << 1;
    }
    k += 1;
}
[/gml]
En el editable adjunto se puede ver la matriz, pero no he encontrado los sprites en ninguna rom, espero que te ayude.
806
Podrías usar las flechas y WASD para el movimiento, barra espaciadora y otra tecla para saltar. Pero sin probar el juego es difícil decidir qué controles se ajustan mejor.
807
Puedes cambiar el ciclo de esta forma para no dejar espacios vacíos:
[gml]
for( i=0; i<100; i+=1 ) array = i*2;
[/gml]
808
La razón del problema es que se usa un objeto sólido y un evento colisión con ese objeto, las colisiones con objetos sólidos mueven a la instancia a su posición anterior, por eso la soda se queda trabada, y cae hasta que su velocidad vertical se hace mayor a cero.
La solución es detectar la colisión con place_meeting, y dejar de usar el evento colisión.
809
Desarrollo de Scripts / Punto en rectángulo rotado
Abril 15, 2016, 01:45:55 AM
Autor: Klamud
Versión: :GM8:
Descripción: Define un rectángulo rotado y revisa si un punto está dentro del rectángulo. Lo mismo se puede hacer con image_angle, pero este script debe tener mayor precisión.

punto_en_rect_rotado( x,y, u,v, w,h, px,py, angulo );
[gml]
///punto_en_rect_rotado( x,y, u,v, w,h, px,py, angulo );
/*                       0 1  2 3  4 5  6  7   8
PUNTO EN RECTANGULO ROTADO
x,y: punto de rotacion en room
u,v: punto de rotacion en rectangulo
w,h: anchura y altura
px,py: punto de prueba
angulo: angulo en grados
*/
var Ax,Ay, Bx,By;

//vector A
Ax = argument6 - argument0;
Ay = argument7 - argument1;

//rotar vector y sumar uv
Bx = lengthdir_x(Ax,argument8) + lengthdir_y(Ay,argument8) + argument2;
By = lengthdir_x(Ay,argument8) - lengthdir_y(Ax,argument8) + argument3;

//resultado
return Bx>0 and Bx<argument4 and By>0 and By<argument5;
[/gml]

Ejemplo adjunto.
810
General / Re:Volviendo a GM TuT
Abril 14, 2016, 05:25:37 AM
Podrías probar lo proyectos basados en GM que corren en Linux: enigma y tululoo. U otras herramientas que se ven prometedoras: godot y phaser.