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

Páginas: 1 ... 9 10 11
151
Preguntas y respuestas / Re:Game Maker se cierra inesperadamente
« en: Julio 29, 2014, 10:37:50 pm »
Arregle el problema, tuve que quitarme de suscrito de todos los otros juegos a los que tenia por ahí que dan basicamente problemas y se crashea la aplicación.

152
Preguntas y respuestas / Re:Game Maker se cierra inesperadamente
« en: Julio 29, 2014, 09:20:06 pm »
Alguien sabe por que sucede? Lo intente de nuevo y mismos problemas.

La compilación la hago sobre Steam Workshop.

153
Preguntas y respuestas / Game Maker se cierra inesperadamente
« en: Julio 29, 2014, 08:55:00 pm »
Buenas  >:( >:(

Cada vez que abro la ventana Play! se van cargando todos los juegos con el tipico Loading... y justo cuando va a cargar uno de mis juegos la pantalla del play! se cierra inesperadamente y no puedo ni llegar a ver que lo carga.

Problema de compilación?

154
Preguntas y respuestas / Re:Problema con sistema de daño
« en: Julio 29, 2014, 06:23:31 pm »
Igual me he fijado que la inmortalidad no hace efecto, el enemigo me saca vida y la inmortalidad no se crea.
Es que insisto, haces cosas raras. Me parece que estás usando código tanto en el enemigo como en el jugador, cuando sería más fácil unificar el código en una sola instancia. En el último código que pusiste, no hay ninguna instrucción que quite vida al jugador, sin embargo dices que el enemigo te quita vida, entonces meda por pensar que estás haciendo chequeos en donde no se debe

and (global.hp = global.hp -1)

Esta condición no va a funcionar, nunca se va a cumplir, por lo que ese bloque de código NUNCA se ejecutará

Citar
Lo único es que si le quita la vida formaría parte de la condición para volverse inmortal.

El código que puse hace exactamente eso, si le quita vida se vuelve inmortal. No necesitas usar un IF para preguntar si le quita vida, sino que le quitas vida y luego cambias a modo inmortal.

Tienes razón funciona, pensaba que global.hp debía contar como una condición por la cual se haría inmortal, no pensé en que podía pasar por la simple cadena  :-\

Igual ahora no cuadra con el delay_attack que tengo, si pongo el global.hp en ambas zonas, en lo de la inmortalidad como en el del delay_attack me bajan ambos la vida. Lo que puedo hacer es que delay forme parte del producto de la inmortalidad y quito la acción de quitarle la vida, voy a probar.

Nada, sigue fallando pienso que debe de ser en algo del enemigo..

Código: [Seleccionar]
if (distance_to_object(obj_player01) < 0.01 and (global.inmortal != 1)){
        global.delay_attack = true;
        global.hp = global.hp -1;
        alarm[1] = 5*room_speed;
                }


Nada, esta resuelto el tema del choque entre inmortal y delay... Una chorradita, igual el delay no se cumple, no hay retraso antes de que se produzca el choque del ataque.


155
Preguntas y respuestas / Re:Problema con sistema de daño
« en: Julio 29, 2014, 06:00:00 pm »
Tu sistema es algo raro y tiene algunos falllos. Raro porque no estás revisando colisiones para saber si el enemigo atacó al jugador, sino que estás usando un chequeo de distancias, en donde si la distancia es menor a 0.1, consideras que ambas instancias están tan cercanas que haya una colisión inminente.

1. No estoy seguro (no he probado) que distance_to_object(obj_enemigo) regrese valores decimales, ya que me imagino que devuelve un valor en pixels, y veo difícil que exista algo como 0.1 (una décima) de pixel.

2.  No debieras (en CREATE) inicializar inmortal a 1. Se supone que
     
     a) El jugador al comenzar el juego no tiene motivos para ser inmortal
     b) El jugador sólo pasa a modo inmortal DESPUÉS de haber sido dañado, NO ANTES. por lo que en create debe ir inmortal = false

Mi idea:
[STEP]
if ( distance_to object(obj_enemigo) <= 2 ) and (global.inmortal == 0)
{
     global.hp -= 1;                       //primero recibe daño
     global.inmortal = 1                  // luego cambia a inmortal
     alarm[0] = 60
}


EVENTO ALARM[0]
global.inmortal = false

Si, tienes razón, lo único es que si le quita la vida formaría parte de la condición para volverse inmortal. Ya que del otro lado hay un delay del ataque, es decir, no puede venir y así por tocarme sacarme vida.

Create Event
Código: [Seleccionar]
global.inmortal = false;
Alarm[5]
Código: [Seleccionar]
global.inmortal = false;
Step Event
Código: [Seleccionar]
if (place_meeting(x,y,obj_enemigo)) and (global.inmortal == 0) and (global.hp = global.hp -1) //distance_to_object(obj_enemigo) < 0.01
    {                     
            global.inmortal = 1;                                             
            alarm[5] = 60;
    }

  if (global.inmortal){
        sprite_index = spr_player01_blood;
    }else{
      sprite_index = spr_ninja_prototype; 
  }


Cambie lo de la distancia por que viene a ser lo mismo.

Igual me he fijado que la inmortalidad no hace efecto, el enemigo me saca vida y la inmortalidad no se crea.

156
Entonces lo que tienes que hacer es poner en el evento create de los enemigos:
Código: [Seleccionar]
var_ataque = true //cuando empieza el juego puedes atacar
en el alarm 0
Código: [Seleccionar]
var_ataque = true
cuando tu enemigo te ataque tienes que poner algo como:
Código: [Seleccionar]
if(var_ataque = true)
{
   //aquí pon lo que pasa cuando el enemigo ataca
    alarm[0] = 100   
    var_ataque = false
}
esto hará que cuando el enemigo ataque tiene que esperar 100 steps para atacar de nuevo

Mmmm un problema que me ha surgido es que cuando por ejemplo el enemigo me toca el Alarm empieza a contar y no se restaura. Sigue contando hasta que me pega de nuevo y me quita directamente la vida.

Lo suyo seria una vez que el enemigo no esta al lado del personaje atacandole que se restaurase el Alarm.

157
Claro, me parece que no entendiste bien copmo funciona la alarm..

Vos con alarm[0]=100 step estas generando una intruccion a los 100 step de cuando se comando esa alarm...


veamos un ejemplo diferente para que lo comprendas mejor..

Evento create
alarm[0]=60


Evento alarm[0]
Game_end


el ejemplo anterior dice que cuando se cree el objeto a los 60 step pasará lo que puse en el evento alarm, osea que el juego finalice.

No. En este caso no sucede eso. Cuando un enemigo me ataca mi vida baja a hp -1, en el primer ataque, en el siguiente hay una diferencia de 100 steps, pero el primero se ejecuta sin que pasen esos 100 steps, he tenido problemas con eso y aun no lo he solucionado.

Vale ya, encontré el problema, gracias a los que me habéis ayudado.

158
por ejemplo, si quieres hacer que el ataque se accione con en espacio  y  se accione a los 100 steps pones en el evento step:
Código: [Seleccionar]
if(keyboard_check_pressed(vk_space)){alarm[0] = 100}Esto hará que cada vez que el jugador accione el espacio y pasen 100 steps se accione el evento alarm 0.
En el evento alarm 0 pones las variables para que comience el ataque

Nope, no me has entendido, lo voy a hacer más claro con tu ejemplo.

Tu me dices que se acciona a los 100 steps, pero antes de que se accione la siguiente accion

La primera acción de ataque se acciona en el step 0 y la alarma desde ahí cuenta los otros 100 para hacer el siguiente. Pero antes de que te haga el siguiente en los 100 steps  hay 1 que ya lo ha hecho y ha sido el primero.

La alarma siempre cuenta desde el principio al siguiente, lo que quiero es que primero pasen los 100 steps y después de esos 100 se haga la acción.

159
Como puedo hacer que se ejecute una acción una vez ha pasado el tiempo del Alarm, imaginemos que quiero hacer un ataque, teniendo en cuenta que el ataque es la acción, como puedo hacer para que una vez acabado el tiempo del alarm haga el ataque?

Ya que cuando lo intento siempre hace primero el ataque y después empieza a contar hasta que se encuentra de nuevo con la posibilidad de realizarlo, por así decirlo quiero que haga eso a la inversa, que empiece a hacer el ataque una vez el contador del Alarm haya acabado.

Ideas?

160
Preguntas y respuestas / Re:Problema con sistema de daño
« en: Julio 29, 2014, 02:05:27 pm »
No hay respuestas  :'( :'(

Me he fijado que uno de los problemas es ese... no pueden coexistir una acción que diga que si inmortal es falso va a poder quitarle vida por que entre medio el alarm que ejecuta el inmortal para que se repita cada x segundos ya lo pone a false de nuevo y ahí hay uno de esos fallos que impide o que se ejecute el inmortal o que me saque vida.

Sigo entre la espada y la pared, si alguien me puede echar una mano me vendría de 10. Por ahora voy a intentar arreglar 1 cosa antes de ir a los dos a la vez. El efecto retraso antes de asestar el golpe, si alguien sabe sobre el tema vendría de mucha ayuda.

Por ahora le quitare el tema de la inmortalidad. 

161
Preguntas y respuestas / Problema con sistema de daño
« en: Julio 29, 2014, 11:49:36 am »
Buenas a todos, he estado teniendo un problema a la hora de realizar el sistema de daño. Lo que he hecho ha sido crear un sistema de inmunidad cada vez que el enemigo me lanza un ataque de tal forma que no me pueda sacar más vida.

Es decir, he creado un simple Alarm con un tiempo programado en el cual debería surgir efecto.

Create Event del personaje principal
Código: [Seleccionar]
global.inmortal = true;
Evento Alarm
Código: [Seleccionar]
global.inmortal = true;
Evento End Step
Código: [Seleccionar]
if distance_to_object(obj_enemigo) < 0.1{   
        if global.inmortal{
            global.inmortal = false;
            alarm[5] = 60;
        }
    }

En el evento End Step del personaje principal empiezan a  venir los problemas. He intentado que en vez de ser la distancia que hay con el enemigo sea cada vez que el "global.hp  = global.hp -1;" pero no ha funcionado, ya que si pongo eso el enemigo no me baja nada de vida.

Evento Step
Código: [Seleccionar]
  if global.inmortal{
        sprite_index = spr_ninja_prototype;
    }else{
        sprite_index = spr_player01_blood;
  }
 

Para cambiar el sprite cada vez que el enemigo me hace daño

___

Ahora a partir de eso he creado el sistema de ataque del enemigo

Create Event del enemigo
Código: [Seleccionar]
global.delay_attack = true;
Basicamente queria que hubiese un efecto retraso antes de que el enemigo le dé el golpe al personaje, por eso he intentado hacer un Alarm, el tema es que el Alarm empieza a contarse desde que el primer golpe fue efectuado, no lo hace pensando en el retraso, sino asestando un golpe principal y luego pensando en el retraso.

Alarm Evento del enemigo
Código: [Seleccionar]
global.delay_attack = true;
End Step del enemigo
Código: [Seleccionar]
if (distance_to_object(obj_player01) < 0.1){
    if global.delay_attack{
        global.delay_attack = false;
        alarm[1] = 30;
                if (global.inmortal = false){
                    global.hp -= 1;
                }
    }
 }

Aquí en un principio lo primero que quiero que verifique es sí existe esa distancia con el obj_player, si la hay va a hacer el efecto delay(retraso), y la siguiente pregunta es sí el personaje esta en modo inmortal, si no lo esta la vida del personaje bajará 1 punto.

He hecho toda la comprobación y no funciona ni el Delay ni la Inmortalidad, lo único que hace el enemigo es pasar de la inmortalidad y pensar en cuanto tiempo le queda para hacer el ataque, al final más que un Delay es un efecto de espera al siguiente ataque y sin importarle si esta o no la inmortalidad. Alguna ayuda o recomendación de lo que podría hacer o mejorar?

Hay que tener en cuenta que el ataque que hace el enemigo al personaje es Meele, no es un efecto de disparo.

162
Desarrollo de Scripts / Uso del Sprint
« en: Diciembre 30, 2013, 06:58:17 pm »
Nombre del creador: King195
Descripción: Es un pequeño código para novicios en Game Maker que sirve para hacer uso del Sprint con tu personaje y que se almacene en una barra o contador que activa o desactiva el sprint con regeneración.
Versión GM: Game Maker Studio

Empecemos!
Primero de todo junto al Create Event de nuestro personaje ponemos las variables para que no de ninguna clase de error a la hora de usar nuestro Sprint

Create Event de nuestro personaje
Código: [Seleccionar]
global.sprint = 100; //Le indicamos el valor inicial del Sprint, que será 100
 sprintmax = 120; //Le indicamos el tope maximo de valor Sprint que puede tener
 sprintbar = true; //Es una variable que se almacenará más adelante en un Alarm


Ahora creamos un evento Alarm[0] que almacenará únicamente la variable "sprintbar", a la cual le daremos uso en un Step Event y podrá realizar la acción. Es tan solo una forma de organizarme  8)

Alarm Event de nuestro personaje
Código: [Seleccionar]
sprintbar = true;
A continuación haremos que todas estas variables tengan sentido. Teniendo el Step Event crearemos un End Step también.

En el Step Event de nuestro personaje pondremos
Código: [Seleccionar]
KEY_SPRINT=keyboard_check(vk_control); //Hacemos una variable que se encargue de guardar cual es nuestra tecla para Sprintar
 
 if global.sprint > 0    //Aquí hacemos uso de la variable que pusimos en el Create Event, y le decimos. Si global.sprint es mayor a
                                 //0 hará todo este codigo.
 {
  if (KEY_SPRINT and KEY_RIGHT)   //Si tenemos pulsada la tecla del Sprint y la tecla par movernos hacia la derecha
    {
   hsp=caminar +4;  //hsp es una variable que actúa como un "Hspeed", sino lo teneis en el create event podeis hacer el cambio
                                // o ponerlo, igual que caminar. Caminar contiene un valor que sumará a Hspeed y le dará la velocidad.
    }
 
   if (KEY_SPRINT and KEY_LEFT)   //Si tenemos pulsada la tecla del Sprint y la tecla par movernos hacia la izquierda
     {
   hsp=-caminar -4;
    }
 
  if (KEY_SPRINT and KEY_UP)   //Si tenemos pulsada la tecla del Sprint y la tecla par movernos hacia arriba
    {
   vsp=-caminar -4;  //vsp es el mismo caso que con hsp, solo que este es para velocidad vertical y el otro para la horizontal
    }
   
  if (KEY_SPRINT and KEY_DOWN)   //Si tenemos pulsada la tecla del Sprint y la tecla par movernos hacia la abajo
    {
   vsp=caminar +4;
    }
 }   

Ahora que ya tenemos esto en el Step Event debemos de crear un End Step Event que hará que la alarma sirva para algo

End Step Event del personaje
Código: [Seleccionar]
if sprintbar   //Si esta la variable sprintbar
    {
    sprintbar = false;  //Al ser un bucle le indicamos que la variable es falsa para que se vuelva a "resetear" por así decirlo
    alarm[0] = 10;  //Aquí ponemos la velocidad a la que el Sprint se regenera. Si tenemos una Room con un Speed de 30 le
                            //acabamos de decir que el alarm active la función cada 0.33 milisegundos aproximadamente.
        if global.sprint < sprintmax and !KEY_SPRINT //Aquí le decimos que mientras no este pulsada la tecla de Sprintar y
                                                        //global.sprint sea menor a 120(el valor de la variable de sprintmax)
        {
            global.sprint+=.5; //lo que hará será sumar 0,5 a la sprintbar(a la barra del sprint o al contador).
        }
       
        if global.sprint > 0 and KEY_SPRINT  //Si global.sprint es mayor a 0 y tenemos pulsada la tecla KEY_SPRINT
        {
            global.sprint-=1.;   //global.sprint restará -1
        }
    }

Para entenderlo mejor, si yo no uso la tecla del sprint la regeneración será de 0.5, y si uso la tecla del sprint me sacará 1 punto a mi barra global.

A continuación creamos la barra global con un Draw Event de nuestro Hud, en el caso de no tener un objeto llamado Hud lo podéis hacer para hacer la comprobación de que funciona vuestro sprint y más adelante sacar una barra más bonita.

En el Draw Event de un obj_hud
Código: [Seleccionar]
draw_text(view_xview[view_current]+384, view_yview[view_current]+50, "Sprint " + string(global.sprint));
//en "Sprint" podéis poner las letras que queráis que se vean al lado de vuestro contador(vuestro contador es básicamente el valor de la variable global.sprint)

view_xview y view_yview son una buena forma de hacer que el obj hud no se tambalee ni se quede estatico, no es lo mismo poner que se verá según la view de la pantalla que poner este código

x+384, y+50

Ya que si pones eso le estas diciendo que sea en una coordenada concreta de la Room, pero que no se moverá.


Espero que os sirva y lo entendáis! A partir de esto podéis crear en el Draw Event algo que quede más bonito que un simple numero que esta en el medio de la pantalla.

Cualquier duda o error avisadme   :P


**ADVERTENCIA** Esto es sólo un tutorial básico sobre como hacer un Sprint sencillo, por lo tanto ya doy por hecho que tenéis que tener un Step Event almenos para hacer caminar a vuestro personaje con sus variables, tan solo hay que moldearlo a vuestro personaje para que quede bien.

163
Preguntas y respuestas / Solido vs No solido
« en: Diciembre 29, 2013, 12:59:30 pm »
Este tema lo abrí para hablar sobre el tema Solido vs No solido en las colisiones entre objetos y generar debate. Creéis útil utilizar la opción Solido en algunos objetos?

A mi forma de ver lo veo innecesario. Ya que sin necesidad de usar "place_frees" se pueden conseguir colisiones mucho mejores y perfectas.

Qué opináis al respecto? :GMS:

164
Preguntas y respuestas / Re:Mis Balas desaparecen Cuando cambio de nivel
« en: Diciembre 28, 2013, 05:39:03 pm »
Es difícil responder sin el código a mano. Si lo pasas seguro que podemos responderte!

165
Anuncios / Re:Busco a alguien que me modifique unos scripts pago por palpay
« en: Diciembre 28, 2013, 05:34:58 pm »
Lo que pides es muy fácil. Imaginalo y después hazlo ;)


KEY_DOWN = keyboard_check(ord('S')); //KEY_DOWN es una variable utilizada para indicar el valor Keyboard_check

if (KEY_DOWN) image_index=0;  //Si presionas la tecla S, y a continuación le indicas que el indice es 0.
{
sprite_index=spr_agachado; //Cuando te agachas pues básicamente cuando presiones la tecla S el personaje cambiará de imagen.
image_speed=0.3;//velocidad de cambio de imágenes en un mismo sprite
}


Si quieres que suceda algo más cuando te agachas debes de ponerlo obviamente, tu tan solo indicas que quieres que cambie de sprite cuando te agachas, pues es básicamente eso. Si quieres que se mueva mientras esta agachado deberías de juntar las 2 teclas de movimiento del palo

if (KEY_DOWN) and (KEY_RIGHT)//si presionamos la tecla "S" y la tecla "D" se moverá hacia la derecha
{
hspeed=4;//le indicamos el Hspeed y el valor que tendrá, en el caso de ir a la derecha es un valor positivo, de lo contrario es negativo
}


Aquí le podrías indicar de alguna forma que siguiera el orden de imágenes que le has dado para que se mueva hacia la derecha mientras esta agachado. Con lo que explique anteriormente. Pero más o menos esta es la idea.




Páginas: 1 ... 9 10 11