Autor Tema: balas y disparo  (Leído 294 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Conectado Sr.Mojon

balas y disparo
« 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


 
No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Hezz

Re:balas y disparo
« Respuesta #1 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:
Código: [Seleccionar]
if (mouse_check_button_pressed(mb_left))
añadirle:
Código: [Seleccionar]
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:
Código: [Seleccionar]
if (mouse_check_button_pressed(mb_left) && cargador > 0) {...; cargador--;}
Luego asignar una tecla para recargar, por ejemplo la tecla R:
Código: [Seleccionar]
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.
 


Conectado Sr.Mojon

Re:balas y disparo
« Respuesta #2 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
 

Desconectado Hezz

Re:balas y disparo
« Respuesta #3 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--;
 

Conectado Sr.Mojon

Re:balas y disparo
« Respuesta #4 en: Julio 12, 2018, 03:06:00 am »
entonces esos puntos los quito y ya
 

Conectado Sr.Mojon

Re:balas y disparo
« Respuesta #5 en: Julio 12, 2018, 03:11:21 am »
ahora me dice el error en la linea 47 pero no hay linea 47
 

Desconectado 3dgeminis

Re:balas y disparo
« Respuesta #6 en: Julio 12, 2018, 07:39:40 pm »
Y cual es el error ??? Talves solo falte una llave }
 

Conectado Sr.Mojon

Re:balas y disparo
« Respuesta #7 en: Julio 12, 2018, 08:36:41 pm »
in obj_jugador,event step,action 1 at line 47:symbol expected
« última modificación: Julio 12, 2018, 08:41:59 pm por Sr.Mojon »
 

Desconectado 3dgeminis

Re:balas y disparo
« Respuesta #8 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.
 

Conectado Sr.Mojon

Re:balas y disparo
« Respuesta #9 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
 

Desconectado BssString

Re:balas y disparo
« Respuesta #10 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í:
Código: [Seleccionar]
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
 

Conectado Sr.Mojon

Re:balas y disparo
« Respuesta #11 en: Julio 14, 2018, 02:41:08 am »
me dice el mismo error y no es el mouse check porque ya lo arregle
 

Desconectado BssString

Re:balas y disparo
« Respuesta #12 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
 

Conectado Sr.Mojon

Re:balas y disparo
« Respuesta #13 en: Julio 14, 2018, 06:28:38 pm »
mi codigo es el mismo que escribio hezz
 

Desconectado 3dgeminis

Re:balas y disparo
« Respuesta #14 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
if (mouse_check_button_pressed(mb_left) && cargador>0)
if (vida+escudo)<0 {instance_destroy()}
y no cuando es una sola
if cargador>0
if mouse_check_button_pressed(mb_left)
Con el uso de llaves por ejemplo lo hago asi
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}
Para mi me queda mas simple escribir codigo de esta forma.

Intenta escribir tu codigo de nuevo desde el principio :)