Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Sr.Mojon en Julio 11, 2018, 10:00:51 PM

Título: balas y disparo
Publicado por: Sr.Mojon en Julio 11, 2018, 10:00:51 PM
yo ya tengo un sistema de disparar pero las balas son infinitar y yo quiero que las balas se gasten y el personaje si no tiene balas no dispare mas aqui les dejo el codigo de disparo del personaje

     En el evento step del personaje:
if mouse_check_button_pressed(mb_left)
    {
     instance_create(x, y, obj_bala); ///dispara
     sprite_index=primera_skin_disparando ///cambia sprite a disparando
    }
if mouse_check_button_released(mb_left) {sprite_index=primera_skin} ///cambia a sprite normal


el evento create de la bala:

var dir = point_direction(x, y, mouse_x, mouse_y);

image_angle = dir;
direction = dir;
speed = 10
Título: Re:balas y disparo
Publicado por: Hezz en Julio 11, 2018, 11:34:46 PM
Podés crear una variable "municion" en tu personaje, con una cierta cantidad, por ejemplo 10.
En el evento step, donde dice:
if (mouse_check_button_pressed(mb_left))

añadirle:
if (mouse_check_button_pressed(mb_left) && municion > 0) {...; municion--;}

De esta forma tu personaje va a tener balas limitadas, pero si querés que tenga un cargador y balas de repuesto, vas a necesitar una variable para la municion del cargador, otra para la de repuesto y otra para la munición máxima del cargador, por ejemplo "cargador", "municion" y "cargador_max". Las balas que va a tener mi cargador va a ser 14, por lo tanto "cargador_max = 14". Entonces, en el evento step:
if (mouse_check_button_pressed(mb_left) && cargador > 0) {...; cargador--;}

Luego asignar una tecla para recargar, por ejemplo la tecla R:
if (keyboard_check_pressed(ord("R"))) {
    //Si tiene 14 o más balas de repuesto
    if (municion >= cargador_max) {
    municion -= cargador_max - cargador;  //Se hace esto por si todavía quedan balas en el cargador
    cargador = cargador_max;
    }
    //Si tiene menos de 14 balas de repuesto
    else if (municion < cargador_max) {
    cargador = municion;
    municion = 0;
    }
}

Luego, para obtener más balas, vas a necesitar que el personaje junte o consiga balas, y que siempre que se le sumen en la variable "municion".

No probé el código, pero creo que debería funcionar.
Título: Re:balas y disparo
Publicado por: Sr.Mojon en Julio 12, 2018, 02:31:47 AM
me sale un error en el evento step en la linea 16 pero no lo encuentro
   step

///movimiento y colision
if keyboard_check(ord("D")) {if not place_meeting(x+velocidad,y,obj_pared) {x+=velocidad}} ///mover derecha si no hay una pared
if keyboard_check(ord("A")) {if not place_meeting(x-velocidad,y,obj_pared) {x-=velocidad}} ///mover izquierda si no hay una pared
if keyboard_check(ord("S")) {if not place_meeting(x,y+velocidad,obj_pared) {y+=velocidad}} ///mover abajo si no hay una pared
if keyboard_check(ord("W")) {if not place_meeting(x,y-velocidad,obj_pared) {y-=velocidad}} ///mover arriba si no hay una pared

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///mirar al cursor
dir_apuntar=point_direction(x,y,mouse_x,mouse_y);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///disparar y cambio de sprite
if (mouse_check_button_pressed(mb_left) && cargador > 0) {...; cargador--;}

   if (keyboard_check_pressed(ord("R"))) {
    //Si tiene 14 o más balas de repuesto
    if (municion >= cargador_max) {
    municion -= cargador_max - cargador;  //Se hace esto por si todavía quedan balas en el cargador
    cargador = cargador_max;
    }
    //Si tiene menos de 14 balas de repuesto
    else if (municion < cargador_max) {
    cargador = municion;
    municion = 0;
    }
}


    {
     instance_create(x, y, obj_bala); ///dispara
     sprite_index=primera_skin_disparando ///cambia sprite a disparando
    }
if mouse_check_button_released(mb_left) {sprite_index=primera_skin} ///cambia a sprite normal

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///vidas y daño
if image_alpha!=1 {tiempo_transparencia = tiempo_transparencia + 1}
if tiempo_transparencia>30
   {
    image_alpha=1
    tiempo_transparencia=0
   }
if vidas<=0 {room_restart()} ///morir y reiniciar
Título: Re:balas y disparo
Publicado por: Hezz en Julio 12, 2018, 02:47:43 AM
Es porque quedó el ...; Eso era para decir que ahí va todo el código que uses en ese lugar, junto con el cargador--;
Título: Re:balas y disparo
Publicado por: Sr.Mojon en Julio 12, 2018, 03:06:00 AM
entonces esos puntos los quito y ya
Título: Re:balas y disparo
Publicado por: Sr.Mojon en Julio 12, 2018, 03:11:21 AM
ahora me dice el error en la linea 47 pero no hay linea 47
Título: Re:balas y disparo
Publicado por: 3dgeminis en Julio 12, 2018, 07:39:40 PM
Y cual es el error ??? Talves solo falte una llave }
Título: Re:balas y disparo
Publicado por: Sr.Mojon en Julio 12, 2018, 08:36:41 PM
in obj_jugador,event step,action 1 at line 47:symbol expected
Título: Re:balas y disparo
Publicado por: 3dgeminis en Julio 13, 2018, 06:11:04 AM
Pues segun lo que dice te falta una llave } o un parentesis ) o alguna otro simbolo.
Si puedes pasar una captura del codigo seria bueno.
Título: Re:balas y disparo
Publicado por: Sr.Mojon en Julio 13, 2018, 04:23:59 PM
no se como hacer que la imagen se vea en pantalla entonces la voy a adjuntar XD
Título: Re:balas y disparo
Publicado por: BssString en Julio 13, 2018, 06:41:16 PM
Hola Sr.Mojon.

Tal como dice 3dgeminis, tu error es sólo un problema de órden y falta de llaves.
Tu problema: A tu línea 16 le falta el signo "&&", además el código que debería ir dentro de ese IF lo pusiste en la línea 31. y en la línea 29 debería ir una llave de cierre "}"
Para solucionarlo, borra de la línea 16 a la 33 y déjalo así:
if (mouse_check_pressed(mb_left) && cargador > 0 { //verifica que hagas click y que tengas más de cero balas
instance_create(x, y, obj_bala); //dispara
sprite_index=primera_skin_disparando //cambia el sprite a disparando
cargador-- //te resta una bala de la pistola
}

if (keyboard_check_pressed(ord("R"))) {
//Si tiene 14 o más balas de respuesto
if (municion >= cargador_max {
municion -= cargador_max - cargador; //Se hace esto por si todavía quedan balas en el cargador
cargador = cargador_max;
}
//Si tiene menos de 14 balas de repuesto
else if (municion < cargador_max) {
cargador = municion;
municion = 0;
}
}


Eso debería ordenar el código y corregir el error

Saludos
Título: Re:balas y disparo
Publicado por: Sr.Mojon en Julio 14, 2018, 02:41:08 AM
me dice el mismo error y no es el mouse check porque ya lo arregle
Título: Re:balas y disparo
Publicado por: BssString en Julio 14, 2018, 06:14:09 PM
Muéstranos tu código, sin el código es difícil hacer un diagnóstico para detectar cuál es el problema exacto
Título: Re:balas y disparo
Publicado por: Sr.Mojon en Julio 14, 2018, 06:28:38 PM
mi codigo es el mismo que escribio hezz
Título: Re:balas y disparo
Publicado por: 3dgeminis en Julio 14, 2018, 08:47:37 PM
El error esta en que falta o hay de mas un parentesis o una llave.
Por regla solo encierro entre parentesis cuando hago una operacion entre variables o funciones, por ejemplo
[gml]
if (mouse_check_button_pressed(mb_left) && cargador>0)
if (vida+escudo)<0 {instance_destroy()}
[/gml]
y no cuando es una sola
[gml]
if cargador>0
if mouse_check_button_pressed(mb_left)
[/gml]
Con el uso de llaves por ejemplo lo hago asi
[gml]
if mouse_check_button_pressed(mb_left)
   {
    sprite_index=spr_disparar
    cargador-=1
    instance_create(x,y,obj_bala)
   }

if mouse_check_button_released(mb_left) {sprite_index=spr_normal}
[/gml]
Para mi me queda mas simple escribir codigo de esta forma.

Intenta escribir tu codigo de nuevo desde el principio :)
Título: Re:balas y disparo
Publicado por: Sr.Mojon en Julio 15, 2018, 06:04:30 PM
el tema es que yo no se programar y entonces me tienen que decir detalladamente para yo ir aprendiendo XD
Título: Re:balas y disparo
Publicado por: 3dgeminis en Julio 15, 2018, 07:32:41 PM
Todos empezamos asi, no te desanimes y continua practicando 8)
Empeiza por no poner parentesis en todos lados, solo cuando una funcion te lo diga, te vas a ahorrar dolores de caveza cuando te salte un error y tengas que revisar en donde te falto uno.
Prueba a escribir de la forma que puse en mi anterior respuesta.
Título: Re:balas y disparo
Publicado por: Sr.Mojon en Julio 16, 2018, 04:50:57 PM
yo no se programar cuando tengo algo que hacer en el juego lo pregunto aqui y ya y despues copio el codigo pero poco a poco estoy empezando a entender los codigos

podrias decirme como se hace detalladamente
Título: Re:balas y disparo
Publicado por: somnus en Julio 16, 2018, 09:34:22 PM
y ademas aconsejo que analices el porque debe ser asi, no solamente debes de copiar el codigo y esperar a que los demas lo hagan, si no lo debes de entender para que lo puedas impementar y cambiar a como te paresca.