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

31
Hola beowulf260! Podés probar esto.

Desde el evento STEP de tu personaje:
[gml]//Izquierda
if (mouse_x < x) {sprite_index = [el sprite de la izquierda];}
//Derecha
else {sprite_index = [el sprite de la derecha];}[/gml]
32
Preguntas y respuestas / Re:coordenadas draw.text
Septiembre 16, 2018, 01:08:08 AM
Hola GGrayonar! Esto depende de dónde querés que aparezca tu texto.
Si lo pones con coordenadas en un evento DRAW, el texto se dibuja en ese lugar de la room.
Si lo pones con coordenadas en un evento DRAW GUI se dibujan en las coordenadas de la cámara mas la distancia que especificaste vos.
Si querés que sigua a un objeto, podés poner draw_text( objeto.x, objeto.y, texto). O desde el mismo objeto con draw_text( x, y, texto). Acordate que podés cambiar estos valores de la forma en la que quieras, por ejemplo: draw_text( objeto.x - 32, objeto.y + 64, texto), etc...
33
Primero creas la variable. Por ejemplo, en el evento create:
EVENTO CREATE
[gml]hablando = false;[/gml]

Luego, cuando interactúe con algún objeto que tenga un diálogo...
EVENTO STEP
[gml]
//Si por ejemplo toca una piedra y querés un diálogo, que la variable sea true.
if (place_meeting(x,y,obj_piedra)) {hablando = true;}

if (hablando == false){
    //Mientras la variable sea false ejecuta un script llamado movimiento.
    movimiento();
}
else {
    //Si la variable es true, entonces ejecuta el script de diálogo.
    dialogo();
}
[/gml]

Lo que quedaría hacer es que cuando termine el diálogo la variable vuelva a ser true.

Esta es una forma muy general de explicar, pero va a cambiar dependiendo de la forma en la que tenés tu código.
34
Hola HKaichim! Podés crear una variable para eso. Por ejemplo, una variable "hablando", que cuando esté en un diálogo esta variable sea true, y cuando no, sea false. Ejemplo:

if (hablando == false) {
(el código donde se mueve y otras cosas que quieras...)
}
else {
(La animación que querés que tenga o lo que sea...)
}
35
Preguntas y respuestas / Re:Rotación de un objeto
Septiembre 06, 2018, 03:10:22 AM
Hola empardopo! Si tu variable cambia a true cuando tu mouse toca al objeto y cambia a false cuando deja de tocarlo, podés intentar esto:


En el evento step:
[gml]if (rotacion == false && image_angle != 0) {
    image_angle++;
}[/gml]

Esto detecta si tu variable rotacion es igual a false y si el ángulo no es igual a 0, entonces sigue girando la imagen en 1º por step hasta que llegue a 0.


Step:
[gml]if (rotacion == false && image_angle != 0 && image_angle < 180){
    image_angle--;
}
else if (rotacion == false && image_angle != 0 && image_angle >= 180){
    image_angle++;
}[/gml]

Esto lo que hace es lo mismo a lo anterior, pero si el ángulo de tu imagen es menor a 180, le resta 1º hasta llegar a 0. En cambio, si es igual o mayor a 180, entonces le suma 1º.


Tené en cuenta que si el ángulo supera los 360º no vuelve a 0, sigue aumentando y esto puede traerte problemas. Para solucionarlo, poné esto en el evento step:
[gml]if (image_angle >= 360) {image_angle = 0;}[/gml]

Esto detecta si el ángulo de tu imagen es mayor o igual a 360, le va poner en 0.


El primer efecto respeta el sentido de giro del objeto (en este caso anti-horario) y no importa la circunstancias, al cambiar la variable a false éste sigue girando en el sentido de giro anti-horario hasta llegar a 0.
En el segundo efecto toma el camino más corto. Si la variable cambia a false antes de los 180, el objeto vuelve hacia atras (gira en sentido horario), y si cambia después de los 180 gira de forma normal (anti-horario).
No sé si me explico bien, por lo que te dejo una imagen para que lo veas mejor.
36
Preguntas y respuestas / Re:Archivos de audio en GMS
Septiembre 03, 2018, 02:26:16 PM
Creo que sólo es para identificar el formato del archivo de forma más rápida, pero no sé exactamente el porqué. A mi me sucede lo mismo.
37
Preguntas y respuestas / Re:Archivos de audio en GMS
Septiembre 03, 2018, 01:27:53 PM
Hola Yuzo! En los documentos de YoYoGames se explica todo.

CitarGameMaker: Studio has a re-vamped audio engine that is based on the *.ogg sound format. You must still load your sounds into the IDE as either *.wav or *.mp3 but you can select compressed audio from the Audio Editor and GameMaker: Studio will convert the sounds to *.ogg (Ogg Vorbis) format when your finished game is compiled. In this way you can keep the final file size of your game to a minimum while ensuring maximum quality.
El motor está basado en el sistema de augio .ogg, pero que también soporta .wav y .mp3, y seleccionando la opción "compressed" desde el editor de audio éstos se conviertern en .ogg al compilar el juego. De esta forma el peso del juego queda en el mínimo garantizándote la máxima calidad.

CitarIn general, Wave files (*.wav) are used for the short sound effects as even though they are generally larger files they will play instantaneously due to the fact that they do not need any type of decoding for playing. You can also have multiple wave files playing at once, which is why you should use these for all the sound effects in your game.
Los archivos .wav son usados para efectos de sonidos cortos ya que, a pesar de ser archivos pesados, no necesitan decodificación al ser reproducidos. Además, se puede usar múltiples archivos Wave al mismo tiempo.

CitarMP3 (*.mp3) files should be used for background music as GameMaker: Studio only permits you to play one music track at a time. These files are much smaller than a wave file would be but have a small CPU overhead as they have to be decoded before being played, hence the limit of only one MP3 file being played at time (however, you can have multiple music tracks in your game, and you would just switch between them when necessary).
Los archivos de tipo .mp3 son para música de fondo y sólo se admite reproducir uno a la vez, porque a pesar que sean más livianos que los archivos Wave, éstos necesitan decodificarse antes de cada uso. Pero esto no quiere decir que no podés tener más de una canción de fondo con tipo .mp3, sólo se debe controlar en qué momentos utilizarlos.

CitarNOTE: Previous versions of GameMaker accepted MIDI file format but that is not the case with GameMaker: Studio. You cannot use MIDI any longer and any imported files from legacy versions which use these may cause the program to crash. These files should be removed or changed before testing!
Los archivos de tipo MIDI no son soportados por gm:s.

CitarThe above rules for file types are for the default configuration of Uncompressed audio. However, you can select to Compressed audio should you wish to use that. What this will do is force all your sound files (irrespective of whether they are *.wav or *.mp3) to be compressed down to Ogg Vorbis *.ogg format files for all platforms.

These sounds are smaller on disc, but will have a slight CPU overhead due to the need to be uncompressed before being played, so you should keep that in mind if you wish to use compression in an already CPU intensive game.
Al elegir comprimir el audio, todos los formatos pasan a ser .ogg. Estos tipos de archivos son más livianos en el disco, pero usan parte del procesamiento para descomprimirlos antes de reproducirlos, por lo que no se recomienda el uso si el juego ya ocupa mucho procesamiento.

CitarIf you have chosen compressed audio, you can then also choose to have your sound as streamed or not streamed. A streamed sound will be one that is uncompressed and played in real time, streamed from the disc. Streaming is ideal for music as it reduces the one off overhead of uncompressing the whole file, which may cause a pause in the game, but is not recommended for simple sound effects where the hit on the CPU is much less.
Al activar la opción "streamed" tus archvos de audio van a ser descomprimidos y usados en tiempo real, transmitidos desde el disco. Esto no es recomendado para efectos de sonido cortos por el impacto que puede presentar en el CPU. Esta opción es ideal para la música, ya que reduce la posibilidad de descomprimir el archivo por completo, lo que puede provocar una pausa en tu juego.

Referencia:
Audio
https://docs.yoyogames.com/source/dadiospice/002_reference/game%20assets/sounds/index.html
Sounds and music
https://docs.yoyogames.com/source/dadiospice/000_using%20gamemaker/006_sounds%20and%20music.html
38
Hola minordioso! Creo que querés que tu enemigo se mueva a la derecha sin detenerse hasta encontrarse con una pared u otro objeto, y que luego cambie de sentido. Si es así, yo lo haría de esta forma.

Objeto enemigo
Create
[gml]dir = -1; //Direccion en la que se mueve. -1 izquierda. 1 derecha.
spd = 4; //Velocidad de movimiento

hsp = 0; //Velocidad horizontal
vsp = 0; //Velocidad vertical

glimit = 12; //Límite de la velocidad de caída vertical
g = 0.5; //Gravedad

//Colisionar con otros obj_enemigo
friend_collision = false;[/gml]

Step
[gml]//Movimiento
hsp = spd * dir;
//La velocidad horizontal es igual a la velocidad de movimiento
//multiplicado por la dirección


//Gravedad
if (vsp < glimit) {vsp += g;}


//Colision horizontal
if (place_meeting(x+hsp, y, obj_suelo)) {
    while(!place_meeting(x+sign(hsp), y, obj_suelo)) {x += sign(hsp);}
    hsp = 0;
   
    //Invertir el lado al que caminar. Por ejemplo, -1 * -1 = 1, de izquierda a derecha.
    dir *= -1;
}

//Colision vertical
if (place_meeting(x, y+vsp, obj_suelo)) {
    while(!place_meeting(x, y+sign(vsp), obj_suelo)) {y += sign(vsp);}
    vsp = 0;
}


//Detectar si no hay suelo
if (instance_position(x+hsp + (dir * (sprite_width/2)), y + sprite_height/2 + 1, obj_suelo) == noone) {dir *= -1; hsp = 0;}


//Colisionar con otros obj_enemigo
if (friend_collision){
    //Colision horizontal
    if (place_meeting(x+hsp, y, obj_enemigo)) {
        while(!place_meeting(x+sign(hsp), y, obj_enemigo)) {x += sign(hsp);}
        hsp = 0;
       
        //Invertir el lado al que caminar. Por ejemplo, -1 * -1 = 1, de izquierda a derecha.
        dir *= -1;
    }
   
    //Colision vertical
    if (place_meeting(x, y+vsp, obj_enemigo)) {
        while(!place_meeting(x, y+sign(vsp), obj_enemigo)) {y += sign(vsp);}
        vsp = 0;
    }
}


//Mover al enemigo
x += hsp;
y += vsp;[/gml]
Este código mueve al enemigo en la direccion que deba moverse hasta que se encuentre a un "obj_suelo" frente suyo o un espacio vacío en el camino, y luego cambia de dirección.
Tiene una variable en el evento create que es "friend_collision", que al estar activada hace que al chocar con otro obj_enemigo cambie de sentido, como con la pared.

Espero que te sirva! :D
39
Preguntas y respuestas / Re:COMO CREO UN RPG EN GMK
Agosto 27, 2018, 05:41:53 AM
Hola jhonn_1234! De la forma en que lo planteas, dejas espacio para muchas preguntas, pero podrías empezar por definir las ideas.

¿Cuál va a ser el estilo de juego?
Es muy importante saber esto desde el principio, ya que vas a hacer todo el juego siguiendo esta idea. Podés hacer un RPG de plataformas, o que sea top-down. Puede ser en tiempo real o por turnos, también puede ser lineal o de mundo abierto.

¿Que estética va a tener?
Al ser un juego RPG la historia es un factor muy importante, y los gráficos deben acompañar al tipo de historia que se cuenta. Usar colores muy "chillones" cuando la historia intenta contar algo triste no es lo mejor. O por lo contrario, usar colores muy "apagados" con una historia muy alegre puede hacer que el jugador se sienta algo desorientado. Esto no es lo mas importante, pero influye en su medida.

¿A qué tipo de jugadores va dedicado el juego?
La dificultad es importante para un juego como un RPG, ya que al hacerlo muy desafiante se puede hacer molesto para jugadores casuales, o hacerlo muy fácil lo puede hacer aburrido. Añadir exploración que lleve mucho tiempo o la necesidad de farmear niveles para ganar poder y así superar una fase puede hacer que a algunos jugadores no les guste, por lo tenés que saber si la experiencia de juego va a ser que se pueda seguir la historia de una forma muy fluida o se necesite hacer misiones secundarias para comprar esa arma más poderosa o tener más nivel. Tenés que tener en cuenta a qué tipo de jugadores querés llegar para obtener las críticas más constructivas.

¿SP o MP?
Es necesario saber de antemano si tu juego va a ser únicamente para un jugador o va a tener un modo multijugador, ya que esto va a afectar al diseño de niveles para que subir de nivel u obtener poder no sea algo aburrido y monótono. Además, por si existe una forma de seleccionar la clase de tu personaje o algo similar, que algunas clases puedan combinar su poder para que no todos sean el guerrero o el arquero. También que la forma de repartir las recompensas (de un jefe, por ejemplo) sea algo "justo" o balanceado.

Algo importante es tener en cuenta la mayor cantidad de cosas que va a tener tu juego, ya que añadir algo a medio camino puede hacer que algunas cosas no sean compatibles entre sí y el juego tenga bugs de gratis. Con libreta y boli anotar todos los personajes, los items, las habilidades o ataques o lo que tenga el personaje, los mapas, las cosas con las que se puede interactuar, los enemigos, etc. Porque no es lo mismo decir: "No voy a hacer que mi personaje pueda correr porque no sé cómo hacer que ataque mientras corre" a sí hacerlo y luego darte cuenta que no sabés hacer lo del ataque, y borrar código que puede estar relacionado con otro objeto y así una reacción en cadena.

Si necesitas consejos sobre códigos o algo así, preguntá y en lo que pueda te ayudo!
Saludos! :D
40
Hola Marcusmaniacus! Yo no uso GMS2, pero en el 1 estaba esta función:
    collision_circle( x1, y1, radius, obj, prec, notme );
Donde x1 e y1 eran las coordenadas del centro del círculo, radius el radio (impresionante pero cierto), obj el objeto a detectar, prec la precisión al detectar (más precisión, más procesamiento ocupa), notme por si no se quiere detectar al objeto que lo ejecuta o algo así (yo siempre lo pongo en true v:).

Acá está el artículo de yoyogames:
https://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/collision_circle.html

También hay otras para detectar una línea, un punto, un cuadrado o una elipse. Esto es todo en GMS1, fijate si te sirve para GMS2 o conseguís algo parecido.

Espero que te sirva! 8)
41
Sign toma un valor y devuelve si es positivo, negativo o cero.
sign(-48); devuelve -1
sign(72); devuelve 1
sign(0); devuelve 0

Por ejemplo:
var numero, resultado;
numero = -5;
resultado = numero * sign(numero);


Quedaría:
resultado = -5 * sign(-5);
resultado = -5 * -1;
resultado = 5;


sign significa signo.
42
Te dejo un ejemplo para que lo veas más claro.

Dejé separado por comentarios al código y el personaje tiene una mask.
Espero que te ayude!!
43
La declaración de la variable la haces con la funcion var en el evento step. Esa variable no se guarda y se elimina después de ejecutarse el código en el evento que hiciste. No se puede acceder desde otro objeto, y son prácticas para no ocupar memoria RAM. Podés declarar una variable desde el evento create, ya que es lo mismo, porque en el evento step va a estar constantemente creándose con la función.

La función sign lo que hace es tomar un valor "x" y devolver su signo. Ejemplo:
sign(-48); <== -1
sign(72); <== 1
sign(0); <== 0

Preguntá lo que quieras, ya que para eso es el foro. Uno no nace sabiendo XD
44
Hola Zappier! Desde el objeto de tu personaje en el evento donde querés hacer eso, poné:

instance_create(x, y, [objeto]);

Saludos!
45
La forma en la que yo lo hago es creando una variable nueva y sumando a todos los objetos que quiero detectar, y luego hacer un sign al resultado.
var suma;
suma = sign(place_meeting(x, y+1, [objeto1] ) + place_meeting(x, y+1, [objeto2] ) + place_meeting(x, y+1, [objeto3] ))


Entonces, si detecta alguno de los objetos la variable es 1 o más, con el sign es 1, y 1 es lo mismo que true, entonces:
if (suma) { vspeed = -6; }