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
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.
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
Es porque quedó el ...; Eso era para decir que ahí va todo el código que uses en ese lugar, junto con el cargador--;
entonces esos puntos los quito y ya
ahora me dice el error en la linea 47 pero no hay linea 47
Y cual es el error ??? Talves solo falte una llave }
in obj_jugador,event step,action 1 at line 47:symbol expected
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.
no se como hacer que la imagen se vea en pantalla entonces la voy a adjuntar XD
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
me dice el mismo error y no es el mouse check porque ya lo arregle
Muéstranos tu código, sin el código es difícil hacer un diagnóstico para detectar cuál es el problema exacto
mi codigo es el mismo que escribio hezz
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 :)
el tema es que yo no se programar y entonces me tienen que decir detalladamente para yo ir aprendiendo XD
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.
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
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.