Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Fashion_Trozos

Páginas: 1 2 3 4 5
16
Preguntas y respuestas / Re:Mi personaje no ataca cuando esta parado
« en: Mayo 30, 2019, 06:57:34 pm »
Muchas gracias por responder! mmmm que es el editable?  :-[
MMMmm y hacerlo de otra manera,... por mi encantado!, lo he echo de esta manera porque es de la única manera que se (que realmente no se jeje), como lo harias?.
Por ahora uede atacar en todas direcciones pero siempre y cuando me este moviendo, si me paro no ataca.
Mi idea es muy básica, quiero que el personaje pueda atacar en todas las direcciones estando quieto y en movimiento. (direcciones arriba, abajo, derecha e izquierda)
Mi idea es hacer un juego ARPG pixelart
Pero sobre todo lo que mas intringulis me tiene es el porque no entra en el estado de ataque, bueno entra pero se sale en cero coma.

17
Preguntas y respuestas / Re:Mi personaje no ataca cuando esta parado
« en: Mayo 29, 2019, 11:33:43 pm »
Muchas gracias por responder!! Si quieres paso el evento step a ver si me puedes decir si ves e fallo (se que debe ser un coñazo repasar código de principiantes como yo jejej)

//------DETECCION DE TECLAS Y DIRECCION----------------------------------------

vh = (-keyboard_check(ord("A")) + keyboard_check(ord("D"))) * v;
vv = (-keyboard_check(ord("W")) + keyboard_check(ord("S"))) * v;




//-----------------DETECCION DE DIRECCION-------------------------------------------------

if      (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";
else if (vh == 0 and vv == 0) dir = "parado"

if      (keyboard_check_pressed(ord("S"))) dir1 = "abajo1";
else if (keyboard_check_pressed(ord("W"))) dir1 = "arriba1";
else if (keyboard_check_pressed(ord("D"))) dir1 = "derecha";
else if (keyboard_check_pressed(ord("A"))) dir1 = "izquierda1";





//-------------------MAQUINA DE ESTADOS-----------------------------------------------------


//Si el estado es distinto a atacando
if estado != estado_personaje.atacando{

if pico_equipado == true {
   
   //Parte grafica con pico
   if dir != ""             estado = estado_personaje.caminando_pico;
   if (vh == 0 and vv == 0) estado = estado_personaje.parado_pico;
   }
   
   
if pico_equipado == false {   
      
   //Parte grafica sin pico   
   if (dir != "")            estado = estado_personaje.caminando;
   if (vh == 0 and vv == 0)  estado = estado_personaje.parado;
   }
}


//Si esta atacando ponemos a cero las velocidades
else{
      vv = 0;
      vh = 0;
   }


//--------------ATAQUE---------------------------------------------------------

if mouse_check_button_pressed(mb_left)
and pico_equipado = true
and estado != estado_personaje.atacando{   
   if dir = "parado"{
      estado = estado_personaje.atacando_parado   
   }else{
      estado = estado_personaje.atacando;
      image_index = 0;
      }
   }
/*if mouse_check_button_pressed(mb_left)
and pico_equipado = true
and estado != estado_personaje.atacando
and vv = 0
and vh = 0


   {
      estado = estado_personaje.atacando_parado;
      image_index = 0;
   }
*/


show_debug_message(estado)




 
   
 


//----------PICAR ROCA---------------------------------------------------------



//Picar roca con o sin pico

if distance_to_object(ob_roca) < 4
and mouse_check_button_pressed(mb_left)
and position_meeting(mouse_x,mouse_y,ob_roca)
and poder_picar == true {
   
   //Si no llevo pico
   if pico_equipado == false{
   ob_roca.vida_roca--;
   recurso_roca++;
   poder_picar = false;
   alarm[0] = room_speed * 1.5;
}
else {
   
   //Si llevo pico
   ob_roca.vida_roca -= 2;
   recurso_roca      += 2;
   poder_picar = false;
   alarm[0] = room_speed * 1.5;
   }
}

//Destruir la roca si es posible
if instance_exists(ob_roca){
   
   if ob_roca.vida_roca <= 0 {
   
      instance_destroy(instance_nearest(x,y,ob_roca))
      if instance_exists(ob_roca) {ob_roca.vida_roca = 4}
      }
   }


//-------SUMAR VELOCIDADES------------------------------------------------------

x += vh;
y += vv;


//--------REINICIAR ROOM---------------------------------------------------------

if keyboard_check_pressed(vk_enter) {
   room_restart()
}

script_execute(estado);

Como podreis ver por mis anotaciones no tengo ni puta idea de programar, ara tres meses no sabía ni que quería decir jejej
Hay una parte que esta comentada porque estaba intentando ver de donde viene el fallo. Muchas gracias por contestar!

18
Preguntas y respuestas / Re:Mi personaje no ataca cuando esta parado
« en: Mayo 29, 2019, 12:38:58 pm »
Buenas gente, voy probando cosas que se me ocurren y no consigo que ataque mientra esta parado. Lo último que he probado es esto...

Código: [Seleccionar]
if mouse_check_button_pressed(mb_left)
and pico_equipado = true
and estado != estado_personaje.atacando{
if dir = "parado"{
estado = estado_personaje.atacando_parado
}else{
estado = estado_personaje.atacando;
image_index = 0;
}
}

La cosa es que no entra en estado = estado_personaje.atacando_parado y no se porque. Se que esta en dir = "parado" porque lo veo en la consola. Veo que entra pero solo un minisegundo y vuelve al estado de parado. Porque no pasa al estado de atacando_parado, puede haber algo en el script que lo devuelva a parado?


19
Preguntas y respuestas / Re:Mi personaje no ataca cuando esta parado
« en: Mayo 28, 2019, 08:29:09 pm »
Creo que he encontrado cual es el problema. En el script de ataque, tengo el switch determinando hacia que lado se esta moviendo el personaje, derecha, izquierda, arriba o abajo, pero cuando quiero que el personaje ataque sin estar moviéndose realmente no se encuentra en ninguna de esas direcciones por que las establezco así, a traves de las velocidades:

Código: [Seleccionar]
if      (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";
else if (vh == 0 and vv == 0) dir = "parado"

Claro, al final cuando esta parado no esta en ninguna "dir" mas que en la de "parado" pero no indica la dirección. Puede que este sea el error?
De ser así, como lo solucionaríais? Como podría definir en que dirección se encuentra mirando el personaje cuando no pulso una tecla?

Se me ocurre algo como "Si la ultima "dir" a sido hacia abajo (por ejemplo), el personaje se encuentra en "dir" "abajo". Como podría hacer algo así?.
Seguro que me estoy liando mas de la cuenta jejej. Un saludo!

20
Preguntas y respuestas / Mi personaje no ataca cuando esta parado
« en: Mayo 28, 2019, 01:16:13 pm »
Buenas a todo el mundo. Llevo ya unos días intentando hacer que funcione una maquina de estados, es a primera vez que lo hago y al final salvando problemillas de por aquí y por allá al final mi personaje se mueve, se esta quieto y ataca. Ahora el problema lo tengo en que cuando esta parado no ataca. He intentado hacer otro estado de "parado_atacando" pero ni aun así lo consigo. Debugueando por la consola veo que entra al estado de atacar parado, pero solo lo hace por un minisegundo, por lo tanto veo que entra en ese estado, pero no se mantiene allí y se sale rapidísimo. Os paso la parte del código de atacar:

Código: [Seleccionar]
if mouse_check_button_pressed(mb_left)
and pico_equipado = true
and estado != estado_personaje.atacando
and dir != "parado"

{
estado = estado_personaje.atacando;
image_index = 0;
}
   
if mouse_check_button_pressed(mb_left)
and pico_equipado = true
and estado != estado_personaje.atacando
and dir = "parado" 

{
estado = estado_personaje.atacando_parado;
image_index = 0;
}

show_debug_message(estado)

Os paso tambien el script de atacar parado, que es exactamente igual que el de atacar. Por ahora solo ataca cuando voy moviendome   :)

Código: [Seleccionar]
image_speed = 1;

switch(dir){
case "abajo":
sprite_index = spr_prota_frente_picando;
break;
case "arriba":
sprite_index = spr_prota_detras_picando;
break;
case "derecha":
sprite_index = spr_prota_derecha_picando;
break;
case "izquierda":
sprite_index = spr_prota_izquierda_picando;
break;
}

if image_index >= image_number-1{
estado = estado_personaje.parado_pico
}

21
Preguntas y respuestas / Re:Dejar totalmente parado el personaje.
« en: Mayo 28, 2019, 01:04:46 pm »
Buenas. Yo tengo poca idea porque soy muy novato y tal pascual,  pero me ha llamado la atención esto:

 if global.ojos = 2 {
    visible = true}

Si lo pones en el Create solo lo comprobará al iniciarse la room, es eso lo que querías? Al igual sí, no se. Un saludo!


22
Preguntas y respuestas / Re:[RESUELTO] Problema con enumerador
« en: Mayo 28, 2019, 01:01:22 pm »
Frida Flowers me funcionado así como has comentado, simplemente quitando los paréntesis. Muchas  gracias y a los demás por contestar!

23
Preguntas y respuestas / [RESUELTO] Problema con enumerador
« en: Mayo 27, 2019, 08:01:43 pm »
Hola, buenas a todo el mundo. Tengo un problema, quiero usar un enumerador porque estoy siguiendo (otra vez) un tutorial de como hacer una maquina de estados. Me da error en el evento Create.

Código: [Seleccionar]
enum ep{
parado = scr_parado(),
caminando = scr_prota_moviendose()
}

dir = "abajo";
estado = ep.parado;

El error que me da es "error game maker enum assignment must be an integer". No estoy utilizando bien el enumerador? un saludo!

24
No hay manera, jejej no se como se hace! llevo toda la mañana intentando hacerlo de otras maneras y no consigo mas que romperlo aun mas jejeje. He estado mirando tutoriales pero la mayoría son demasiado complicados y por ahora me pierdo. He intentado hacerlo con un enumerador  pero no hay manera, no entiendo muy bien como funcionan. entiendo que es hacer una simple lista, pero realmente me hace falta para hacer una maquina de estados? Podría programar que mi personaje camine, ataque y este quieto en cada una de las direcciones que vengan al caso sin hacer una máquina de estados? Os paso el código que tengo echo a ver si me podéis encarrilar aun que sea un poco jeje.

En el Create

Código: [Seleccionar]
vh = 0;
vv = 0;
v  = 3;

//------MAQUINA DE ESTADOS----------------


scr_parado()
dir = "abajo"


//--------ESTADOS ANIMACION---------------

pico_equipado = false;
picando       = false;
atacando      = false;


//--------PERMISOS------------------------

poder_picar = true;


//-------CONTADORES RECURSOS---------------

recurso_roca = 0;

En el Step

Código: [Seleccionar]
//------DETECCION DE TECLAS Y DIRECCION----------------------------------------

vh = (-keyboard_check(ord("A")) + keyboard_check(ord("D"))) * v;
vv = (-keyboard_check(ord("W")) + keyboard_check(ord("S"))) * v;




//-------DIRECCION, MOVIMIENTO o PARADO, PARTE GRAFICA-------------------------

if      (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";
else if (vh == 0 and vv == 0) dir = "parado"




//------SI ME MUEVO O NO PARTE GRAFICA-----------------------------------------

if !scr_prota_picando(){

if pico_equipado == true {

//Parte grafica con pico
if dir != "" scr_prota_moviendose_con_pico()
if (vh == 0 and vv == 0) scr_parado_con_pico()
}

else{

//Parte grafica sin pico
if dir != ""  scr_prota_moviendose()
if (vh == 0 and vv == 0) scr_parado()
}
}

else{

vh = 0;
vv = 0;

}

//--------------ATAQUE---------------------------------------------------------

if mouse_check_button_pressed(mb_left)
and pico_equipado == true
and !scr_prota_picando(){
   scr_prota_picando();
  }


//----------PICAR ROCA---------------------------------------------------------



//Picar roca con o sin pico
if distance_to_object(ob_roca) < 4
and mouse_check_button_pressed(mb_left)
and position_meeting(mouse_x,mouse_y,ob_roca)
and poder_picar == true {

//Si no llevo pico
if pico_equipado == false{
ob_roca.vida_roca--;
recurso_roca++;
poder_picar = false;
alarm[0] = room_speed * 1.5;
}
else {

//Si llevo pico
ob_roca.vida_roca -= 2;
recurso_roca      += 2;
poder_picar = false;
alarm[0] = room_speed * 1.5;
}
}

//Destruir la roca si es posible
if instance_exists(ob_roca){

if ob_roca.vida_roca = 0 {

instance_destroy(instance_nearest(x,y,ob_roca))
if instance_exists(ob_roca) {ob_roca.vida_roca += 4}
}
}


//-------SUMAR VELOCIDADES------------------------------------------------------

x += vh;
y += vv;


//--------REINICIAR ROOM---------------------------------------------------------

if keyboard_check_pressed(vk_enter) {
room_restart()
}


Script parado

Código: [Seleccionar]
image_speed = 0;
image_index = 0;

Script parado con pico

Código: [Seleccionar]
image_speed = 0;
image_index = 0;

Script caminando

Código: [Seleccionar]
image_speed = 1

switch(dir){
case "abajo":
sprite_index = spr_prota_frente;
break;
case "arriba":
sprite_index = spr_prota_detras;
break;
case "derecha":
sprite_index = spr_prota_derecha;
break;
case "izquierda":
sprite_index = spr_prota_izquierda;
break;
}

Script moviendose con pico

Código: [Seleccionar]
image_speed = 1;

switch(dir){
case "abajo":
sprite_index = spr_prota_frente_con_pico;
break;
case "arriba":
sprite_index = spr_prota_detras_con_pico;
break;
case "derecha":
sprite_index = spr_prota_derecha_con_pico;
break;
case "izquierda":
sprite_index = spr_prota_izquierda_con_pico;
break;
}

Script atacando

Código: [Seleccionar]
image_speed = 1

switch(dir){
case "abajo":
sprite_index = spr_prota_frente_picando;
break;
case "arriba":
sprite_index = spr_prota_detras_picando;
break;
case "derecha":
sprite_index = spr_prota_derecha_picando;
break;
case "izquierda":
sprite_index = spr_prota_izquierda_picando;
break;
case "parado":
sprite_index = spr_prota_frente_picando;
break;
}
show_debug_message(image_index)
if image_number >= image_number-1 {
scr_parado()
}

25
Hola y muchas gracias por responder. Quieres decir que con la linea del script de "Ataque/picando" que pone:

Código: [Seleccionar]
if image_index = 4 {

atacando = false;

}

No es suficiente para parar el ataque, no?

Voy a intentar hacer algunos cambios a ver si puedo afinar mas mi pregunta, es que dudo tanto que no se que preguntar

26
Hola, buenas tardes a todo el mundo. Llevo unos días intentando aprender un poco sobre las maquinas de estados. He conseguido hacerla funcionar, pero solo en parte. Por ahora mi personaje se mueve en todas direcciones con su animación en la dirección concreta, cuando esta parado simplemente se queda quieto mirando hacia la dirección en la que iba, si iba a la derecha y dejo de pulsar, pues eso, se detiene mirando a la derecha. Hasta ahí bien, el problema me ha surgido al querer que mi personaje ataque. He echo unas animaciones cutres del personaje atacando en todas direcciones y he preparado un script de "ataque" pero no ha funcionado lo bien que me gustaría. Os pongo algo del código y a ver si me podéis echar un cable.

En el evento Crate no he puesto nada referente a la maquina de estados, lo probé como explicaba Hektor Profe en un video de Youtube pero no hubo manera, me daba errores y decidí seguir adelante sin hacer un enumerador con los estados (a lo mejor ahí empezó mi fallo).

En el Step primero tengo esto:

if      (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";
else if (vh == 0 and vv == 0) dir = "parado"

if pico_equipado == true {
   
    //Parte grafica con pico
    if dir != "" scr_prota_moviendose_con_pico()
    if (vh == 0 and vv == 0) scr_parado_con_pico()
    }
   
    else{
       
    //Parte grafica sin pico
    if dir != ""   scr_prota_moviendose()
    if (vh == 0 and vv == 0) scr_parado()
    }

Tengo como dos modos que digamos, uno con un pico equipado y otro sin.

Estos son los scripts (pondré solo los de sin pico)

Script parado:

image_speed = 0;
image_index = 0;

Script moviendose:

image_speed = 1

switch(dir){
    case "abajo":
        sprite_index = spr_prota_frente;
        break;
    case "arriba":
        sprite_index = spr_prota_detras;
        break;
    case "derecha":
        sprite_index = spr_prota_derecha;
        break;
    case "izquierda":
        sprite_index = spr_prota_izquierda;
        break;
}

Esto es lo que tengo para que se mueva, y se mueve. El problema viene cuando quiero añadir el ataque. Realmente lo único que he echo para añadir el ataque es lo siguiente:

Step:

if mouse_check_button_pressed(mb_left) {    
   atacando = true;
}


if atacando == true {
    scr_prota_picando()
}

Y el script de "ataque":

image_speed = 1

switch(dir){
    case "abajo":
        sprite_index = spr_prota_frente_picando;
        break;
    case "arriba":
        sprite_index = spr_prota_detras_picando;
        break;
    case "derecha":
        sprite_index = spr_prota_derecha_picando;
        break;
    case "izquierda":
        sprite_index = spr_prota_izquierda_picando;
        break;
    case "parado":
        sprite_index = spr_prota_frente_picando;
        break;
}

if image_index = 4 {

    atacando = false;

}

Lo que me sucede haciéndolo así es que al pulsar el botón del mouse el personaje entra en el modo ataque por decirlo de alguna manera y ya no lo abandona, a parte no funciona como me gustaría que es que cuando pulso ataca y cuando no, pues no. Lo que sucede es que se activa la animación dependiendo de hacía que lado me muevo y se queda activada todo el tiempo mientras me mueva, si voy a la derecha veo al personaje atacando sin parar hacía la derecha y en cuando me detengo se detiene la animación también. Me imagino que no lo estoy haciendo bien, me cuesto mucho imaginarme la lógica para que todo funcione bien.

27
No te preocupes, na mas faltaría!  ;D

28
Preguntas y respuestas / Re:Como picar piedra? [SOLUCIONADO]
« en: Mayo 15, 2019, 10:55:17 am »
Para tener un poco mas claro la diferencia entre objetos e instancias, un pequeño texto de un articulo:

Diferencia entre instancias y objetos
En realidad, no colocamos los objetos en una room para que se ejecuten. Lo que colocamos son instancias de esos objetos. Y, ¿qué es una instancia en Game Maker? Podemos decir que una instancia es una copia de ese objeto, una plantilla con todas las características que pueden hacer. Lo comento porque hay cosas que se pueden hacer con objetos y cosas que se pueden hacer con instancias, ya que aunque lo parezca no es lo mismo.
¿Porqué es diferente? Cuando decimos que algo afecta a una instancia, afecta solo a esa copia en particular que se ha creado en la room. Si existen otras instancias del mismo objeto, a esas no les afecta en nada. Cuando decimos que algo afecta a un objeto, le afectará a todas las instancias que hay en la room en ese momento.

(www.aprendegamemaker.com/introduccion-objetos-game-maker-studio/)

Gracias por responder. Esto que pones creo que mas o menos lo tengo claro, lo que manda en as propiedades de las instancias es el objeto. Viendo un vídeo de Hektor Profe en el que ponía un ejemplo de unos moldes de galletas y las galletas lo entendí muy bien. Pero el problema me viene en cuanto hago por ejemplo un instance_destroy y se destruyen todas la instancias a la vez, o en saber como afectara cierta cosa si lo colocas en el evento step o en uno de colisión. No tengo nada de base, hace un par de meses no sabía ni que quería decir programar jejej, al ir tan escaso pues ciertas cosas que a lo mejor son muy básicas se me escapan

29
Preguntas y respuestas / Re:Como picar piedra?
« en: Mayo 14, 2019, 11:06:53 pm »
Y para ponerlo en el evento step lo he echo así ha funcionado

Código: [Seleccionar]
if distance_to_object(ob_roca) < 4 and keyboard_check_pressed(vk_space){
ob_roca.vida_roca--
}

if instance_exists(ob_roca){
if ob_roca.vida_roca = 0 {
instance_destroy(instance_nearest(x,y,ob_roca))
if instance_exists(ob_roca) {ob_roca.vida_roca += 4}
}
}

30
Tienes que poner el codigo de esta forma:


Que quieres decir, que si pongo ++ no es lo mismo que +=1?

Páginas: 1 2 3 4 5