:( ok colegas makeros, estoy estancado en un problemilla, es el siguiente:
me gustaria que me ayudaran con un sistema de compra de armas, no tengo idea de como realizarlo he pensado y pensado y nada, ya utilice variables y nada, lo que quiero es que al iniciar el juego solo tenga disponible un arma, cuando oprima la tecla "D" cargue el arma de inicio y despues si vulevo a oprimir la tecla "D" que cambie al botiquin, ahora bien cuando compre un arma que al orpimir la tecla "D" vaya cambiando de armas y asi sucesivamente, tengo solo 5 armas en mi juego de echo es el Horda Zombie,
mas ejemplificado
al iniciar el juego solo tengo el botiquin y el arma 1 si oprimo la tecla "D" que solo cambie a esos items
despues cuando compre arma nueva al oprimir la tecla "D" que vaya cambiando de item- botiquin-arma1-armanueva- asi hasta q compre las cicno armas y que vaya cambiando de items ya lo intente y es que solo quiero utilizar un objeto jugador
no quiero estar cambiando de objeto jugador para cada arma no se si se pueda
de antemano muchas gracias y espero que alguien pueda ayudarme
Antes que nada, quiero aclarar que desde luego que hay maneras más PRO de hacer esto. Simplemente elegí este método porque he notado cierta reticencia por usar estructuras de datos, y casi siempre se propone el uso de variables o arreglos. Esta es una manera de hacerlo usando COLAS (ds_queue). En mi juego uso una lista y un mapa, pero de momento que se con colas. El código no está pulido ni completo, pero sirve para que te des una idea.
1. Declara constantes en GM (Resources > Define Constants). También puedes declararlas en CREATE como variables globales, pero me gusta más como constantes porque el texto queda resaltado en color distinto
resortera = 0. <----- En otros lugares les dicen tirachinas o tirapiedras
pistola = 1
rifle = 2
escopeta = 3
bazuca = 4
botiquin = 5
EVENTO CREATE del jugador
global.mi arma = 0
global.arma_id[5] = 0
//Esto es como una lista de verificación
existencias[resortera] = 0
existencias[pistola] = 1 //Al comienzo del juego, dices que quieres tener una pistola...
existencias[rifle] = 0
existencias[escopeta] = 0
existencias[bazuca] = 0
existencias[botiquin] = 1 //... y un bootiquín
//Número de subimagen para los sprites de las armas.
global.arma_id[resortera] = 1
global.arma_id[pistola] = 2
global.arma_id[rifle] = 3
global.arma_id[escopeta] = 4
global.arma_id[bazuca] = 5
global.arma_id[botiquin] = 6
statst[0, resortera] = "Resortera" //Nombre
stats[1, resortera] = 1 //daño por proyectil
stats[2, resortera] = 10 //municiones
stats[0, pistola] = "Pistola"
stats[1, pistola] = 2
stats[2, pistola] = 6
stats[0, rifle] = "Rifle"
stats[1, rifle] = 3
stats[2, rifle] = 4
stats[0, escopeta] = "Escopeta"
stats[1, escopeta] = 5
stats[2, escopeta] = 5
stats[0, bazuca] = "Bazuca"
stats[1, bazuca] = 10
stats[2, bazuca] = 3
stats[0, botiquin] = "Botiquín"
stats[1, botiquin] = 0
stats[2, botiquin] = 2
Cuando compres algo, por ejemplo, la bazuca, haces
existencias[bazuca] = 1
NOTA: Las colas son una estructura para almacenar datos. Imagina una gente haciendo fila en una tienda (aquí les llamamos colas, "la cola del banco"). Leer un dato de la cola significa SACARLO de la estructura. El primer dato guardado en la cola, es el primero en ser leído (y expulsado).
Hacemos una mochila "virtual" (TAMBIEN en CREATE)
mochila = ds_queue_create() //COLA
STEP del JUGADOR. Para elegir un arma, el arma tiene que estar guardada en la mochila
if (global.mi arma == 0) // Si el jugador no tiene arma
{
for (i=0; i < 6; i+=1)
{
if (existencias[i] == 1)
mochila = ds_queue_enqueue(mochila, global.arma_id[i]) //Llenar mochila según lo que tengas comprado/adquirido.
}
if ds_queue_size(mochila) > 0 //Si hay al menos un item en la mochila
{
global.mi_arma = ds_queue_dequeue(mochila) // Elegir (sacar) primer item de la mochila
}
}
if (ds_queue_size(mochila) < 1) {global.mi_arma = 0}
EVENTO de la tecla para cambiar de item (Tecla D, en este caso)
if (ds_queue_size(mochila) > 0) // Si la mochila no está vacía
{
global.mi_arma = ds_queue_dequeue(mochila) // Elegir (Sacar) el siguiente item de la mochila
}
else // Si se vació la mochila
{
for (i=0; i < 6; i+=1)
{
if (existencias[i] == 1)
mochila = ds_queue_enqueue(mochila, global.arma_id[i]) //Rellenar mochila nuevamente.
}
global.mi_arma = ds_queue_dequeue(mochila) // Mochila llena, Elegir (sacar) primer item de la mochila
}
Si por ejemplo, aparte tienes un objeto bala, ahí puedes usar una variable para controlar el daño
dmg_bala = obj_player1.stats[1, global.mi arma] //daño provocado por la bala del arma equipada
:-[ penumbra crees que pudieras poner un ejemplo del script, la verdad esque se me complica algo, ya que trabajo un switch para cambiar de arma, por ejemplo tengo que si global.cambioarma=0 se cambie al sprite que no tiene armas, y cuando sea global.cambioarma=1 que se cambie al sprite que tiene el arma1, coloco en el step del jugador el codigo para la tecla "D" if keyboard_check_pressed(ord('D')){global.cambioarma+=1} tengo los 5 sprites para cada arma con la tecla "D" hago el ciclo de cambio de armas, en el demo quedo bien pues ahi tengo todas las armas pero para el juego quiero que se puedan ir comprando, la verdad es que no se como hacer ese sistema y tu ejemplo esta bien solo que como lo colocaria a mi codigo
Cita de: gudy en Febrero 19, 2014, 04:36:59 PM
ya que trabajo un switch para cambiar de arma, por ejemplo tengo que si global.cambioarma=0 se cambie al sprite que no tiene armas, y cuando sea global.cambioarma=1
El switch se usaría parecido, sólo que el caso cero no se revisaría en el switch.
if (global.mi_arma == 0)
Cambiar sprite al de imagen vacía
else
{
switch (global.mi_arma)
{
El SWITCH que usas, excluyendo el caso "0" (cero)
}
}
Cita de: gudy en Febrero 19, 2014, 04:36:59 PM
coloco en el step del jugador el codigo para la tecla "D" if keyboard_check_pressed(ord('D')){global.cambioarma+=1}
Yo usaría en lugar de eso, el evento Key Press ('D') y ahí pondría el código del EVENTO para la tecla D que escribí en el primer mensaje.
:) gracias penumbra, con tu ejemplo pude lograr algo similar, ahora ya tengo lista la tienda en mi juego y puedo cambiar los items, gracias a seguir makeando..... XD :D