Puedes usar los mismos sprites, con image_xscale = -1 cuando ve a la izquierda y con image_xscale = 1 cuando ve a la derecha. A menos que el personaje sea asimétrico.
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.
1667
Preguntas y respuestas / Re: letra ñ en los textos
Septiembre 27, 2014, 09:02:56 PM
En la ventana "Font Properties" que aparece cuando creas una fuente, presiona el botón "All" de la sección "Character range".
1668
Preguntas y respuestas / Re:[Duda] Boton de aceleracion que se desactive
Septiembre 26, 2014, 05:47:48 PM
Puedes hacer en el evento "Press" del botón para acelerar que se sume un pequeño valor a la velocidad del objeto, y si se ha alcanzado la velocidad máxima ya no se suma. Además tiene que estar actuando una fricción para que si se deja de pulsar el botón el objeto baje la velocidad.
1669
Preguntas y respuestas / Re:Mover objeto con el mouse en room física
Septiembre 26, 2014, 04:43:50 AM
Debes aplicar una fuerza al objeto, de esta forma:
[gml]
fuerza = valor; //magnitud de la fuerza
angulo = point_direction( x,y, mouse_x,mouse_y ); //angulo en que se aplica la fuerza
xforce = lengthdir_x( fuerza, angulo );
yforce = lengthdir_y( fuerza, angulo );
physics_apply_force( x,y, xforce,yforce );
[/gml]
El valor de la fuerza tiene que ser ajustado cuidadosamente, en base a el tamaño del objeto, a su densidad y a la relación entre pixeles y metros.
[gml]
fuerza = valor; //magnitud de la fuerza
angulo = point_direction( x,y, mouse_x,mouse_y ); //angulo en que se aplica la fuerza
xforce = lengthdir_x( fuerza, angulo );
yforce = lengthdir_y( fuerza, angulo );
physics_apply_force( x,y, xforce,yforce );
[/gml]
El valor de la fuerza tiene que ser ajustado cuidadosamente, en base a el tamaño del objeto, a su densidad y a la relación entre pixeles y metros.
1670
Preguntas y respuestas / Re:iluminacion
Septiembre 25, 2014, 06:14:10 PM
Hola.
Tal vez estás dibujando la superficie a una profundidad mayor a la de los demás objetos.
Tal vez estás dibujando la superficie a una profundidad mayor a la de los demás objetos.
1671
Preguntas y respuestas / Re:sistema de bonificacion con ds_lists
Septiembre 24, 2014, 08:07:54 PM
Yo pensé en almacenar los valores numéricos de las bonificaciones, por si eran variables. Pero si tienen un valor único, creo que tu idea es mejor. Sólo se van agregando los nombre en el orden en que ocurren en el juego. Con tu método, sería conveniente que los valores numéricos sean almacenados en un ds_map al inicio del juego.
Para agregar un elemento que no está en la lista se puede hacer lo siguiente:
[gml]
elemento = "First Strike";
if( ds_list_find_index(lista,elemento) == -1 )
ds_list_add( lista, elemento );
[/gml]
Tal vez ya no necesitas esto, pero para saber cuántas veces se repite un elemento, usa:
[gml]
elemento = "Algo";
contador = 0;
for( i=0; i<ds_list_size(lista); i+=1 )
contador += (ds_list_find_value(lista,i) == elemento );
[/gml]
Hasta luego.
Para agregar un elemento que no está en la lista se puede hacer lo siguiente:
[gml]
elemento = "First Strike";
if( ds_list_find_index(lista,elemento) == -1 )
ds_list_add( lista, elemento );
[/gml]
Tal vez ya no necesitas esto, pero para saber cuántas veces se repite un elemento, usa:
[gml]
elemento = "Algo";
contador = 0;
for( i=0; i<ds_list_size(lista); i+=1 )
contador += (ds_list_find_value(lista,i) == elemento );
[/gml]
Hasta luego.
1672
Preguntas y respuestas / Re:sistema de bonificacion con ds_lists
Septiembre 24, 2014, 01:03:58 AM
Hola.
El funcionamiento de las listas es muy parecido a el de los arreglos (arrays), pero ,según el manual, funcionan más rápido. También se podría hacer usando variables individuales para cada bonificación, pero usando listas se escribe menos código.
Primero es necesario saber cuántos tipos de bonificaciones se pueden obtener, entonces se crea la lista y se inicializa:
[gml]
bonos = ds_list_create();
for( i=0; i<n; i+=1 ) //n es el número de bonificaciones
ds_list_add( bonos, 0 ); //todos los elementos de la lista valen cero
[/gml]
Después, cada vez que haces algo que te da puntos extra se agrega a la lista. Cada evento debes identificarlo con un índice:
[gml]
ds_list_replace( bonos, 1, nuevo_valor ); //el 1 corresponde a "First Strike"
[/gml]
Al acabar el nivel se obtiene el total:
[gml]
total = 0;
for( i=0; i<=n; i+=1 )
total += ds_list_find_value( bonos, i );
[/gml]
Después se dibuja la lista, esto se tendría que hacer elemento por elemento:
[gml]
//First Strike
valor = ds_list_find_value( bonos, 1 );
if( valor > 0 )
draw_text( x,y,"First Strike" + string(valor) );
//Instant Poser
valor = ds_list_find_value( bonos, 2 );
if( valor > 0 )
draw_text( x,y,"Instant Poser" + string(valor) );
//...
[/gml]
El código anterior se podría reducir si se usa otra lista que se haya inicializado con los nombres de las bonificaciones, o usando ds_maps, pero en este caso es más sencillo usar listas.
Y antes de comenzar otro nivel la lista se debe reiniciar:
[gml]
for( i=0; i<n; i+=1 ) ds_list_replace( bonos, i, 0 );
[/gml]
Eso es todo, cualquier duda comenta.
El funcionamiento de las listas es muy parecido a el de los arreglos (arrays), pero ,según el manual, funcionan más rápido. También se podría hacer usando variables individuales para cada bonificación, pero usando listas se escribe menos código.
Primero es necesario saber cuántos tipos de bonificaciones se pueden obtener, entonces se crea la lista y se inicializa:
[gml]
bonos = ds_list_create();
for( i=0; i<n; i+=1 ) //n es el número de bonificaciones
ds_list_add( bonos, 0 ); //todos los elementos de la lista valen cero
[/gml]
Después, cada vez que haces algo que te da puntos extra se agrega a la lista. Cada evento debes identificarlo con un índice:
[gml]
ds_list_replace( bonos, 1, nuevo_valor ); //el 1 corresponde a "First Strike"
[/gml]
Al acabar el nivel se obtiene el total:
[gml]
total = 0;
for( i=0; i<=n; i+=1 )
total += ds_list_find_value( bonos, i );
[/gml]
Después se dibuja la lista, esto se tendría que hacer elemento por elemento:
[gml]
//First Strike
valor = ds_list_find_value( bonos, 1 );
if( valor > 0 )
draw_text( x,y,"First Strike" + string(valor) );
//Instant Poser
valor = ds_list_find_value( bonos, 2 );
if( valor > 0 )
draw_text( x,y,"Instant Poser" + string(valor) );
//...
[/gml]
El código anterior se podría reducir si se usa otra lista que se haya inicializado con los nombres de las bonificaciones, o usando ds_maps, pero en este caso es más sencillo usar listas.
Y antes de comenzar otro nivel la lista se debe reiniciar:
[gml]
for( i=0; i<n; i+=1 ) ds_list_replace( bonos, i, 0 );
[/gml]
Eso es todo, cualquier duda comenta.
1673
Juegos en desarrollo / Re:La Cruzada Secreta (prueba)
Septiembre 13, 2014, 05:34:36 PM
Creo que es un error del antivirus. Yo tengo el avast y a veces me detecta los juegos creados con gm8 como archivos sospechosos. He querido enviar un mensaje a avast sobre el error pero no se exactamente qué datos enviar.
1674
Preguntas y respuestas / Re:Archivos .gmres
Septiembre 10, 2014, 09:16:41 PM
Parece que ese tipo de archivos sólo se puede abrir (o mas bien importar) con GM8, y puede contener todos los recursos del juego o sólo algunos, un proyecto que se pueda abrir correctamente con GMS debe tener extensión "gmk" o "gm81".
1675
Preguntas y respuestas / Re:Peleandome con el 3D
Septiembre 10, 2014, 08:16:26 AM
Hola.
Revisé tu proyecto y encontré que el error se debe el orden de las funciones en el evento "Draw"; lo he solucionado colocando la función "d3d_transfor_set_identity()" al final.
El tutorial está basado en una versión anterior a GMS, cuando no se podían aplicar matrices de transformación a la proyección, pero ahora se han hecho algunos cambios en la forma en que se maneja el 3D.
Yo para evitarme problemas, escribo el código de esta forma:
[gml]
d3d_set_projection( ... );
d3d_transform_set_identity();
d3d_transform_add_rotation...( ... );
//...
d3d_transform_add_translation( ... );
//Aquí se dibuja el objeto
d3d_transform_set_identity();
[/gml]
También modifiqué la posición en que se dibuja el planeta, para que pueda rotar sobre su eje. Y en vez de usar "depth" agregué la variable "z"; no te recomiendo usar "depth" como variable de posición porque después puedes necesitarla para definir el orden de ejecución de los códigos.
Dejo adjunto el ejemplo editado.
Hasta luego.
Revisé tu proyecto y encontré que el error se debe el orden de las funciones en el evento "Draw"; lo he solucionado colocando la función "d3d_transfor_set_identity()" al final.
El tutorial está basado en una versión anterior a GMS, cuando no se podían aplicar matrices de transformación a la proyección, pero ahora se han hecho algunos cambios en la forma en que se maneja el 3D.
Yo para evitarme problemas, escribo el código de esta forma:
[gml]
d3d_set_projection( ... );
d3d_transform_set_identity();
d3d_transform_add_rotation...( ... );
//...
d3d_transform_add_translation( ... );
//Aquí se dibuja el objeto
d3d_transform_set_identity();
[/gml]
También modifiqué la posición en que se dibuja el planeta, para que pueda rotar sobre su eje. Y en vez de usar "depth" agregué la variable "z"; no te recomiendo usar "depth" como variable de posición porque después puedes necesitarla para definir el orden de ejecución de los códigos.
Dejo adjunto el ejemplo editado.
Hasta luego.
1676
Preguntas y respuestas / Re:URGENTE: Problema simple con Switch
Agosto 31, 2014, 05:23:10 PM
Hola, si escibes switch( a, b ) no va a funcionar porque sólo se puede comparar una variable o una expresión.
Y la expresión a==b && b==c sólo puede devolver dos valores (true o false), por lo que, en ese caso, conviene utilizar el if.
Y la expresión a==b && b==c sólo puede devolver dos valores (true o false), por lo que, en ese caso, conviene utilizar el if.
1677
Preguntas y respuestas / Re:¿Con draw y con sprite predefinido?
Agosto 27, 2014, 09:34:38 PM
Usa draw_self(). Por si acaso, recuerda que no es recomendable hacer muchas cosas en el evento "Draw".
1678
Preguntas y respuestas / Re:URGENTE ¿Por que esto no funciona?
Agosto 24, 2014, 11:53:24 PM
Hola, el primer error es la forma de determinar la dirección; la función random(1) tiene pocas probabilidades de devolver un cero. Y en vez de usar la variable "direccion" que tu has definido sería más fácil usar la variable "direction", así el movimiento se hace de manera automática.
Prueba de la siguiente forma, he comprobado que funciona:
[gml]
///Inicializar (evento create)
speed = 2;
direction = choose( 90, 270 );
[/gml]
[gml]
///Mantenerse dentro de la vista (evento step)
if( y < view_yview[0] ) direction = 270;
if( y > view_yview[0]+view_hview[0]-sprite_height ) direction = 90;
[/gml]
[gml]
///Rebotar con otra instancia del mismo objeto (evento collision)
x = xprevious;
y = yprevious;
if( direction == 270 ) direction = 90;
else if( direction == 90 ) direction = 270;
[/gml]
En el evento "collision" el objeto vuelve a su posición anterior para que no se traslape con la otra instancia (usando las variables "xprevious" y "yprevious"), se obtiene el mismo resultado si el objeto es sólido.
Prueba de la siguiente forma, he comprobado que funciona:
[gml]
///Inicializar (evento create)
speed = 2;
direction = choose( 90, 270 );
[/gml]
[gml]
///Mantenerse dentro de la vista (evento step)
if( y < view_yview[0] ) direction = 270;
if( y > view_yview[0]+view_hview[0]-sprite_height ) direction = 90;
[/gml]
[gml]
///Rebotar con otra instancia del mismo objeto (evento collision)
x = xprevious;
y = yprevious;
if( direction == 270 ) direction = 90;
else if( direction == 90 ) direction = 270;
[/gml]
En el evento "collision" el objeto vuelve a su posición anterior para que no se traslape con la otra instancia (usando las variables "xprevious" y "yprevious"), se obtiene el mismo resultado si el objeto es sólido.
1679
Preguntas y respuestas / Re:Puedo de alguna forma recuperar el Sprite que hacia luego del Out of Memory?
Agosto 21, 2014, 07:10:42 PM
Abre un archivo "backup" del juego; sigue estos pasos File, Open, en tipo elige "backup files" de la lista desplegable, selecciona uno de los archivos. Es posible que el sprite se encuentre como antes de la modificación.
1680
Preguntas y respuestas / Re:if para diferentes instancias del mismo objeto
Agosto 20, 2014, 06:26:13 PM
Y se podría optimizar usando un sólo "for" para crear las instancias y obtener el "id":
[gml]
var i;
// botones
for (i = 0; i < 2; i += 1)
{
seleccion = instance_create(x1+i*64,y,obj_pestanas)
}
[/gml]
[gml]
var i;
// botones
for (i = 0; i < 2; i += 1)
{
seleccion = instance_create(x1+i*64,y,obj_pestanas)
}
[/gml]