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

1441
Preguntas y respuestas / Re:problema con fisicas
Febrero 01, 2015, 09:16:38 PM
Hice un ejemplo que no usa físicas, no está bien pulido pero funciona, el problema que tiene es que cuando el puntero se mueve muy rápido la bola se suelta.
1442
Preguntas y respuestas / Re:problema con fisicas
Febrero 01, 2015, 05:23:40 PM
Creo que el primer error es éste
Cita de: zorge en Febrero 01, 2015, 05:05:04 AM
... los objetos usan physica pero la room no ...
un objeto con "physics" no se puede usar en una room sin "physics" (al contrario si se puede).
Me parece que en realidad los objetos no tiene "physics" activadas, porque el código que muestras funciona, verifica eso.
1443
Modifica un poco el código de creación:
[gml]
with( instance_create(100,200,personaje) )
{
    image_alpha = 0
    alarm[0] = 1;
}
[/gml]
1444
Parece que no hay error, sólo falta hacer algo cuando no exista la instancia objetivo, como buscar otro objetivo:
[gml]
///Evento Step
if instance_exists(target) //Para prevenir el error de que haya sido destruido el objeto antes de comenzar...
{
    motion_add(point_direction(x,y,target.x,target.y), 0.5); //Direccion que debe seguir...
}
else target = instance_nearest(x,y,OBJECT); //Elije otro objetivo
[/gml]
¿Qué es lo que hace mal?
1445
Escribe esto en el evento Intersect Boundary:
[gml]
x = xprevious;
y = yprevious;
[/gml]
Si quieres algo más elaborado, proporciona más información, como qué tipo de juego es, y por si acaso la versión de GM.
1446
Preguntas y respuestas / Re:explocion random
Enero 31, 2015, 05:53:29 AM
Crea una lista de objetos (o instancias) que se actualice en cada click, como en este ejemplo: http://www.comunidadgm.org/preguntas-y-respuestas/crear-un-objeto-al-azar/
1447
¡Es cierto!, no contemplé el hecho de que el juego ya estuviera en modo 3D, mil disculpas, en ese caso lo recomendable es usar d3d_set_projection_ortho en vez de d3d_end, no estoy seguro pero es probable que esa maniobra también borre la surface. Si el código está en el evento Create no necesitas poner surface_free porque esa función borra la superficie, y no creo que importe el orden en el que se definen las variables text y srf.
1448
En ese caso vuelve a usar el código que te mostré al principio y agrega esto al evento Mouse Leave
[gml]
sprite_index = botonnormal;
[/gml]
1449
Vaya, no me lo esperaba, mejor usa este código en el evento Step:
[gml]
if( mouse_check_button(mb_left) and collision_point(mouse_x,mouse_y,id,false,false) )
     sprite_index = botonefecto;
else sprite_index = botonnormal;
[/gml]
1450
En el evento de colisión, incrementa los valores de escala, ya sea sumado o multiplicando. Ejemplos:
[gml]
image_xscale += 0.1;
image_yscale += 0.1;
[/gml]
ó
[gml]
image_xscale *= 1.2;
image_yscale *= 1.2;
[/gml]
1451
Asigna un sprite a un objeto y cambia los valores de esas variables, que por defecto valen 1.

Si quieres cambiar el tamaño de un sprite sin asignarlo a un objeto, usa las funciones draw_sprite_stretched ó draw_sprite_ext.
1452
Prueba estos códigos:
[gml]
///Evento Left Pressed
sprite_index = botonefecto;
[/gml]
[gml]
///Evento Left Released
sprite_index = botonnormal;
[/gml]
1453
Preguntas y respuestas / Re:Crear un objeto al azar
Enero 29, 2015, 09:19:36 PM
Entonces parece que si entendí bien, aquí está el ejemplo con formato de GM8.0

Yo lo hice transformando un sólo tipo de objeto, pero tú necesitas que sean diferentes tipos de objetos, el principio es el mismo, en vez de usar la variable id se usaría la variable object_index o se crearía un objeto padre, intenta hacerlo por ti, así aprenderás más rápido, si no te convence pregunta de nuevo, estaremos pendientes para ayudarte.
1454
Preguntas y respuestas / Re:Movimiento relativo
Enero 29, 2015, 04:35:09 AM
Espero haber entendido bien, quieres que los objetos B y C roten alrededor del objeto A, si es que se tocan.
Hice un ejemplo en el que uso el siguiente código:
[gml]
///Click en obA

with( obPadre ) //con los objetos B y C
{
    if( place_meeting(x,y,other) ) //si está tocando esta instancia
    { //revisar la posición relativa
        if( x < other.x ) //si está a la izquierda...
        {
            if( y < other.y ) y += 32; //...y arriba, bajar 32 pixeles
            else x += 32; //...y abajo, mover a la drecha
        }
        else //si está a la derecha...
        {
            if( y < other.y ) x -= 32; //...y arriba, mover a la izquierda
            else y -= 32; //...y abajo, subir 32 pixeles
        }
    }
}
[/gml]
hice 2 objetos "obB" y "obC" que son hijos de "obPadre", cuando se hace click en el objeto A se revisa la posición relativa de los objetos y se colocan en una nueva posición.

En el ejemplo los objetos se transportan de forma instantánea, para que los objetos se muevan lentamente hasta su nueva posición el código se complicaría un poco.
1455
Lo que puede causar problemas es que se usa la función surface_create en cada evento Draw, se están creando nuevas superficies sin borrar las anteriores, esto puede ralentizar el juego o llenar toda la memoria, si la nueva textura no cambia con el tiempo, conviene crearla una sola vez en el evento Create, o por lo menos usar la función surface_free antes de crear otra.

Lo demás parece estar bien, pero tal vez hay otra pieza de código que está borrando la textura (tal vez no hay suficiente memoria de textura y se sobrescribe), el manual recomienda verificar que la superficie existe antes de usarla con la función surface_exists.

Puede ser que el objeto que crea la surface tenga menor depth que los otros objetos que usan esa surface, entonces usan una surface creada en el step anterior y está corrupta, eso se solucionaría creándola en el evento Create.

Si persisten los problemas, lo mejor será convertir la surface en un sprite o background usando las funciones que mencioné anteriormente.