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

886
Cada elemento y compuesto podría representarse con un número entero. Para no tener que definirlo manualmente y no tener que recordarlo se podría usar un enum de esta forma:
[gml]
enum materia
{
    aire,
    tierra,
    fuego,
    agua,
    polvo,
    lodo,
    lava,
    vapor
}
[/gml]
Cada combinación se podría indicar en una matriz, así:
[gml]
combinacion[ materia.fuego, materia.agua ] = materia.vapor;
combinacion[ materia.agua, materia.fuego ] = materia.vapor;
[/gml]
Como no todas las combinaciones generan otro compuesto, habría espacios vacíos en la tabla, causando un desperdicio de memoria. Debe existir un método de almacenamiento más eficiente, pero por ahora no se me ocurre.

Para evitar errores, sería conveniente inicializar la tabla con un valor que indique que la combinación no está definida, por ejemplo -1
[gml]
for( i=materia.aire; i<=materia.vapor; i++ )
for( j=materia.aire; j<=materia.vapor; j++ )
{
    combinacion[i,j] = -1;
}
[/gml]

Usando el sistema anterior, cada elemento o compuesto sería una instancia de un mismo objeto pero con diferente image_index.
887
Preguntas y respuestas / Re:Juego en movimiento
Marzo 16, 2016, 08:59:22 PM
Primero la vista se tiene que mover con una velocidad constante:
[gml]
//Evento Step
view_xview[0] += valor1;
view_yview[0] += valor2;
[/gml]
valor1 y valor2 deben ser mayores a 1, de lo contrario la vista no se moverá, esto es porque las variables de la vista se redondean automáticamente.
Si quieres que la vista tenga un movimiento más lento debes usar unas variables personalizadas:
[gml]
//Evento Step
x_vista += valor1;
y_vista += valor2;
view_xview[0] = x_vista;
view_yview[0] = y_vista;
[/gml]
El personaje debe tener el mismo desplazamiento de la vista, y para que no se salga, hay que revisar su posición relativa a la vista:
[gml]
{ /*código de movimiento del personaje*/ }

//desplazar como la vista
x += valor1;
y += valor2;

//revisar posicion
if( x < view_xview[0]+(anchura/2) ) x = anchura/2;
if( x > view_xview[0]+view_wview[0]-(anchura/2) ) x = view_wview[0]-(anchura/2);
if( y < view_yview[0]+(altura/2) ) y = altura/2;
if( y > view_yview[0]+view_hview[0]-(altura/2) ) x = view_hview[0]-(altura/2);
[/gml]
anchura y altura son las dimensiones de la máscara de colisión, y se dividen entre 2 porque se supone que está centrada en la posición de la instancia, esos valores debes escribirlos de forma explícita.
888
Preguntas y respuestas / Re:Compartir Score
Marzo 15, 2016, 05:42:21 PM
GMS trae un tutorial para conectar con Facebook (el problema es que está en "advanced")
889
Preguntas y respuestas / Re:problema con puzzle
Marzo 15, 2016, 05:09:10 PM
En este mensaje está un ejemplo para recortar las piezas usando surfaces
http://www.comunidadgm.org/preguntas-y-respuestas/crear-rompecabezas-de-9-piezas/msg116576/#msg116576
890
Una solución es que el movimiento de la flecha se divida en secciones; si se sobrepasa cierta velocidad, en lugar de sumar la velocidad directamente a la posición, se van sumando pequeños desplazamientos hasta alcanzar la posición final. Ejemplo:
[gml]
//Evento Step
//(vx, vy) son las componentes de la velocidad
v = sqrt( vx*vx + vy*vy ); //rapidez
if( v > 8 ) //si sobrepasa el limite seguro
{
    divisor = ceil( v/8 ); //divisor de la velocidad
    repeat( divisor ) //ciclo
    {
        x += vx/divisor; //el desplazamiento se hace poco a poco
        y += vy/divisor;
        if place_meeting( x,y, obBloque ) //si hay colision
        {
            vx = 0; //la velocidad se hace cero
            vy = 0;
            v = 0;
            break; //termina el ciclo
        }
    }
}
[/gml]

Otro método sería realizar un proyección de forma que detecte la posición de la colisión de forma geométrica, como se muestra en este artículo: http://www.gamedev.net/page/resources/_/technical/game-programming/swept-aabb-collision-detection-and-response-r3084

Un método parecido al anterior, pero que resulta más sencillo, utiliza la función collision_line. Ejemplo: http://www.escueladevideojuegos.net/colisiones-ultra-perfectas-gamemaker/
891
Ahora si lo veo. Tal vez se debe a que la flecha se crea tomando en cuenta sólo el punto de rotación, el ángulo y la distancia a ese punto. Prueba con un script como este http://www.comunidadgm.org/desarrollo-de-scripts/obtener-posicion-de-adjuntado/. También deberías mostrar el código que utilizas.
893
No distingo el error, todos los lanzamientos del video me parecen bien.
894
En este post, en las respuestas 20 y 22, hice una explicación de cómo seleccionar la pieza que está encima
http://www.comunidadgm.org/preguntas-y-respuestas/crear-rompecabezas-de-9-piezas/15/
895
En lugar de usar varios sprites, podrías usar uno solo que gire en dirección del jugador; para ello es necesario que el sprite se dibuje de forma horizontal, viendo a la derecha, y usar este código:
[gml]
image_angle = point_direction( x,y, obj_jugador.x,obj_jugador.y );
[/gml]

Si es necesario usar varios sprites, entonces también se debe calcular el ángulo y usar un sprite para cada intervalo:
[gml]
angulo = point_direction( x,y, obj_jugador.x,obj_jugador.y );
if( angulo < 135 )  sprite_index = spr_enemy_1_up;
else if( angulo > 225 ) sprite_index = spr_enemy_1_down;
else sprite_index = spr_enemy_1;
[/gml]
además no es necesario asignar la depth en cada step
896
¿Qué sistema operativo utilizas?

Aquí aparece una solución para un problema al iniciar GMS, pero creo que es diferente a tu problema: http://help.yoyogames.com/hc/en-us/articles/216757548-Studio-Fails-to-Start-No-IDE-Log-Written

Prueba a desconectarte de internet antes de abrir GMS.
898
Si son luces puntuales, debes incrementar el rango. Si son luces direccionales, deben quedar más perpendiculares a las caras de los modelos. Otra opción sería usar una luz ambiente, pero la consecuencia es que el nivel máximo de oscuridad sería el color de esta luz. El grado de iluminación también se modifica al cambiar la longitud de los vectores normales de los modelos, pero no recuerdo el efecto que corresponde a cada longitud. Si nada funciona, tal vez tengas que usar shaders; la ventaja es que puedes agregar características extra, como especularidad. Otra opción es generar previamente las luces y sombras dentro de la textura (técnica conocida como bake), usando algún programa externo (hay muchos programas para elegir).
899
Esto puede funcionar
[gml]
//Create
image_speed = 0; //no tiene animacion
pulsable = true; //se puede pulsar
global.pulsados = 0; //por ahora no hay instancias pulsadas
[/gml]
[gml]
//Left Pressed
if( image_index < image_number-1 ) //si puede crecer
if( pulsable ) //si se puede pulsar
{
    image_index += 1; //crece
    pulsable = false; //ya no se puede pulsar
    global.pulsados += 1; //incrementa contador
   
    //si el contador es igual al numero de cubos
    if( global.pulsados >= instance_number(object_index) )
    {
        //las instancias se pueden volver a pulsar
        with( object_index ) pulsable = true;
        global.pulsados = 0; //se reinicia el contador
    }
}
[/gml]
900
General / Re:Bakasiones en hawaii
Marzo 04, 2016, 04:26:12 PM
Pues yo deseo que te vaya mal  XD, para que tengas muchas cosas que contarnos, pero también espero que cumplas tus objetivos.

¿No se supone que mendigar está bastante prohibido en Alemania? En ese caso, tal vez tengas que vivir unos días en la carcel.