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 - penumbra

841
Preguntas y respuestas / Re:abarcar todo el sprite
Febrero 03, 2015, 07:00:51 AM
indica qué código estás usando.
842
Preguntas y respuestas / Re:abarcar todo el sprite
Febrero 03, 2015, 03:03:54 AM
Bien, pero usa eventos mouse global, porque si no puede pasar lo mismo, que no se lance el evento si no se está dentro del sprite.
843
Preguntas y respuestas / Re:abarcar todo el sprite
Febrero 03, 2015, 02:38:42 AM
Cita de: zorge en Febrero 03, 2015, 02:22:39 AM
penumbra pero eso no haria que cambiase la forma actual de colision que tengo??con el suelo con otros objetos etc???
Tienes razón. No sé por qué pensé que el objeto que arrastras no tenía interacción con otros objetos. Lo que sucede es que los eventos MOUSE LEFT/RIGH o MOUSE LEFT/RIGHT PRESSED sólo responden si haces click dentro del sprite. Si haces clcik un pixel fuera de los límites del sprite (o de su máscara), los eventos nunca se lanzan y no pasa nada.

Una solución es usar la función collision_circle() en la posición del puntero del raton. Si collision circle detecta colisión con la pelota, ésta se arrastra. La función permite ajustar el radio de colisión, por lo que es posible arrastrar la pelota aun si se hace click fuera del sprite de la pelota.

Otra solución es preguntar a qué distancia está el puntero del ratón del objeto pelota, y si está dentro de una distancia dada, al hacer click, que se pueda arrastrar la pelota. De esta manera no importaría el sprite/máscara del objeto, sólo la distancia que hay del puntero a la paelota
844
Preguntas y respuestas / Re:Detección de movimiento
Febrero 03, 2015, 02:20:36 AM
Cita de: mastershadow en Febrero 03, 2015, 02:08:56 AM
No estoy seguro de si me he explicado correctamente (probablemente no)
Intenté entender qué quieres hacer, pero me ha confundido tu manera de explicarlo, Y me ha enredado más lo del movimiento de una mano (¿la mano de quién?)r. ¿Acaso la animación está dividida en dos etapas y la primera mitad de un ciclo de caminata corresponde a un sprite y la segunda mitad a otro sprite y el movimiento de la mano son los movimiento de los brazos en el ciclo de caminata?

al menos a mi no me ha quedado claro.  ???

Si acaso he entendido es que si la tecla de movimiento está presionada, debe pasar de un sprite a otro de manera ininterrumpida. Eso se puede hacer usando o STEP o el evento ANIMATION END

Digamos que sprite1 es la primera versión de caminata y sprite2 la segunda versión.

En ANIMATION END preguntas mediante una condición si el sprite es sprite1, si es así, preguntas si se está presionando en ese momento la tecla de movimiento, si resulta que sí, entonces se resetea image_index (para que la animación nueva comience en el frame 0) y se cambia sprite_index a sprite2.

USando step sería
a) Preguntar si el sprite actual corresponde a caminata versión 1 y si el sprite ha llegado a su última subimagen.
b)Si lo de arriba se cumple, y se sigue presionando la misma tecla de direccion, se cambia sprite_index al sprite versión2  (pero también hay que resetear image_index para que la aniamacion comience donde debe)

Ya sea que se use STEP o ANIMATION END, lo que yo puse es la mitad del proceso, faltaría verificar si estando en curso la animacion de sprite2, se ha llegado a la última subimagen, y si se sigue presionando la misma tecla de dirección, volver a comenzar a mostrar sprite1
845
Preguntas y respuestas / Re:Como trabajar con listas
Febrero 02, 2015, 10:11:31 PM
Veo que usas GM8. Sí, existe un manual que explica bien las funciones de listas, y es el manual de GMS, que explica mucho mejor como trabaja cada función y trae un ejemplo de todo (excepto la parte de accesors que es nueva en GMS y no existe en GM8, pero no se necesita para usar listas en GM8).

Mi sugerencia es que consultes el manual de GMS, ya que las funciones de listas son las mismas. Eso a menos que des detalles de qué buscas hacer. En realidad las listas son similares a los arreglos, sólo que para meter un valor, hay que usar una función, para leer un valor, hay que usar una función, pero también tienen sus ventajas, porque hay funciones para borrar elementos de la lista o distribuír al azar la estructura de la lista (cosa que con arreglos no se puede o es más tardado implementar)
846
En GM no se pueden abrir dos o más rooms a la vez. Las alternativas son usar surfaces o views.

El enfoque de usar surfaces es dibujar todo lo que tenga que ver con el inventario en la surface, y al final dibujar esa surface en DRAW. Si es tu primera vez con surfaces, lo mejor es usar la referencia del manual de GMS
http://www.comunidadgm.org/preguntas-y-respuestas/que-es-un-surface/

La otra opción es usar views, que me parece sería más rápido en este caso. En una view se dibuja el room normal, y en otra se dibuja el inventario

Y bueno, otra opción es tener un objeto inventario y dentro de ese objeto dibujar todo el inventario y darle la profundidad menor para que se dibuje encima de lo demás
847
Preguntas y respuestas / Re:abarcar todo el sprite
Febrero 02, 2015, 09:42:28 PM
es cuestión de definir una máscara más grande que el sprite y usar el evento MOUSE LEFT del objeto pelota
848
Preguntas y respuestas / Re:Fisicas
Febrero 02, 2015, 11:31:57 AM
El efecto de retroceso se puede hacer con física o sin fisica, pero si ya tienes el juego avanzado al estilo normal, creo que no conviene meter físicas.

Hay varias cosas que se deben tener en cuenta, pero desconozco cómo las manejes. Se supone que si el retroceso dura medio segundo, durante ese medio segundo, el jugador no debería moverse, es decir, se debería impedir su movimiento con las teclas o lo que uses para moverlo. Por ejemplo[gml]
if (!retroceso)
{
   //código para mover al jugador en las 4 posiciones MEDIANTE TECLAS, JOYSTIC, ETC
}[/gml]

Tampoco sé cómo manejas el ataque, qué evento usas para detectar que has golpeado a un enemigo, si el taque lo hace un objeto arma adicional al jugador o el mismo sprite del jugador cambia a un sprite de ataque con espada incluída. Así que voy a suponer que de algún modo sabes el ID de instancia del enemigo al que se ataca, y que ésta se guarda en la variable id_enemigo.

Cuando el jugador contacte con la espada a un enemigo:[gml]
if (!retroceso)
{
     alarm[11] = 0.5 * room_speed      //medio segundo
     retroceso = 1                             //El retroceso se activa
     direction = point_direction(x, y, id_enemigo.x, id_enemigo.y) * -1    //El -1 invierte la dirección, para que sea opuesta al enemigo (o en su lugar, sumar + 180)
     speed = 3
     friction = 0.1                                       //Esto no sé qué tal funcione, se puede modificar o suprimir si no te convence
}[/gml]

ALARM[11][gml]
retroceso = 0                //Terminar retroceso
speed = 0                     //Anular speed (si es que friction no alcanzó a hacerla 0 antes)
[/gml]

Es la idea básica, le falta por pulir por ejemplo, que si atacas a un enemigo desde una posición no muy frontal, el retroceso puede seguir una trayectoria diagonal, habría que mejorar eso para que sólo pueda ser en 4 direcciones (se usaría una división sencilla para "redondear" la dirección a 4 posibles ángulos)
849
Preguntas y respuestas / Re:Fisicas
Febrero 02, 2015, 08:56:14 AM
Cita de: zHeMaa en Febrero 02, 2015, 08:40:41 AM
He estado probando bastante rato, he leído la web de Yoyo sobre las físicas y no lo consigo.. básicamente quiero que cuando objeto "a", por ejemplo, colisione con objeto "b", objeto "b" sea empujado unas casillas.
¿Casillas? Si los objetos se mueven por grid o valores fijos, es mejor no usar físicas. No es por desanimar, pero no todas las mecánicas son adecuadas para tener física.

Si deseas seguir usando física, al menos da detalles, porque eso de "no lo consigo" nos deja sin idea, no indica qué pasa o cómo se comporta actualmente el juego, qué código y eventos estás usando, cuáles son las propiedades de los objetos, cómo estás manejando la colisión, etc...


850
Preguntas y respuestas / Re:vspeed=10
Febrero 02, 2015, 08:01:38 AM
Cita de: eams1986 en Febrero 02, 2015, 05:58:14 AM
pero la speed con la que esta el juego no me la muestra.
y tampoco cuando la velocidad aumenta.

¿Como haces que el juego aumente de velocidad?  Porque de manera normal, se supone que el juego debe de ir siempre a la misma velocidad. La velocidad a la que corre el juego está dada por la variable room_speed. La otra variable que conozco que está relacionada con velocidad son los frames por segundo reales, dados por la variable de solo lectura fps_real
851
Cita de: Kain88 en Febrero 02, 2015, 01:00:56 AM
Como puedo hacer en GML que el programa reconozca esa última imagen cuando toca el suelo?
Gracias!

El evento Animation End se ejecuta cuando un sprite llega a su último frame. Se puede usar, por ejemplo, para cambiar al sprite que mostraría al personaje de pie o en otra acción que no fuese estar agachado

También se puede preguntar en step si image_index del sprite en cuestión llegó al último frame.
852
Preguntas y respuestas / Re:FATAL ERROR en codigo?
Febrero 02, 2015, 02:12:51 AM
El error se debe a que en STEP estás haciendo esto:

[gml]if seguirmouse == id[/gml]

las dos cosas que se comparan deben tener un valor correcto, en tu caso, globalvar NO TIENE NINGÚN VALOR (en CREATE declaraste la variable, pero no se inicializó con ningún valor). Si seguirmouse no posee valor, es imposible compararla contra otra cosa, por eso GMS da el error
853
Normalente sólo se necesita hacer

[CREATE]
[gml]image_speed = 0.4[/gml]

pero hay que hacer image_speed = 0 cuando NO se presione tecla alguna (a menos que tengas un sprite animado para cuando el jugador no avanza). Para complementar, se puede poner usar:

if keyboard_check(ord("W")){y -= global.velocidad; sprite_index = spr_jugador_arriba; image_speed = 0.4}
854
Preguntas y respuestas / Re:Power ups random
Febrero 01, 2015, 06:07:40 AM
Depende. No especificas si tu juego es vista cenital o lateral. Si es lateral, no nada más habría que ocuparse de crear al azar los powerup, sino colocarlos sobre el piso (hasta puede haber diferentes pisos a diferentes alturas). De lo contrario, se podrían crear en cualquier lugar donde no haya piso, y se vería como que flotan, o quedarían en puntos a donde el jugador no puede llegar. Y si es vista cenital, pues también hay que evitar que no se creen encima de paredes o cosas sólidas a donde el jugador no tiene acceso.

Para que no ocurra tan seguido, puedes tener una alarma que se ajusta también de manera aleatoria, por ejemplo, en el evento de la alarma:

[gml]
randomize()
//crear powerup con instance_create blah blah blah
alarm[0] = irandom_range(30,  120) * room_speed
[/gml]

Eso haría que se crearan objetos (powerups) en intervalos aleatorios de mínimo 30 segundos y máximo 2 minutos
855
Preguntas y respuestas / Re:Crear niebla de guerra
Enero 31, 2015, 11:58:48 PM
No es el video con la mejor calidad, pero puede resultar útil