Buenas Compañeros!

El tema es que quería hacer la variable global.ammo (para la munición) pero tengo varias armas; pistola, escopeta, rifle... y en la pistola si tengo puesta la variable y me funiona correctamente y todo, lo unico malo y el problema que me encuentro a la hora de ir cambiando de arma es que si creo todas las variables con el mismo nombre me cuenta toda la munición, sin importar de que arma sea, y si las creo con distinto nombre tengo que dibujarlas todas en la view para saber cuantas balas me quedan o lo que sea... la pregunta sería:

¿sabriaís decirme alguna forma para tener varias variables y que fuesen cambiando en el juego conforme cambio de objeto?

Gracias Makeros!!

#1 Mayo 11, 2015, 06:17:34 AM Ultima modificación: Mayo 11, 2015, 06:33:40 AM por penumbra
En principio, la variable  global.ammo no es necesaria. Aun sin esa variable se puede imprimir cuál es la cantidad de munición de determinado objeto.

El código que usas debe tener error de lógica, porque a pesar de que haya objetos distintos con nombres de variables iguales, se puede mantener el valor de cada variable sin que se sumen sólo por tener el mismo nombre. Sin ver el código, difícil saber cuál es la parte que falla (pienso que estás usando o un with que cuenta en todas las instancias o un objeto parent).

Cita de: WolfIng Entertainment en Mayo 11, 2015, 05:37:07 AM
¿sabriaís decirme alguna forma para tener varias variables y que fuesen cambiando en el juego conforme cambio de objeto?
Parece que estás usando distintos objetos para cada arma. En ese caso, se necesita saber qué objeto arma tienes equipado actualmente. Por ejemplo, considerando que usas  global.ammo:

[gml]
global.ammo = objeto_equipado.balas   //objeto_equipado puede ser un identificador de instancia o un índice de objeto.
[/gml]

Aunque personalmente prefiero no tener un objeto por cada arma. Lo que yo uso es un archivo donde guardo todos los atributos de todas las armas, y al cambiar de arma, leo los atributos del arma desde ese archivo, de esa manera, a lo largo del juego sólo tengo un objeto arma "dinámico", aunque es algo enredoso.

Yo te sugeriría que usaras un arreglo para gestionar las arma y sus balas


Cita de: penumbra en Mayo 11, 2015, 06:17:34 AM

Yo te sugeriría que usaras un arreglo para gestionar las arma y sus balas

Lo siento Penumbra, no he entendido bien lo que has querido decir... :-X :-X podrías explicarmelo de otra forma?
no uso codigo para dibujar la variable, uso D&D, las acciones que tiene predeterminadas GameMaker.
Gracias por tomarte tu tiempo en contestar  ;)

Osea lo que te pasa si pones distintos nombres por ejemplo así.

global.pistola = 350 /// balas
global.escopeta= 150 /// balas

Etc.... Eso? Dices tu que si dibujas todos los variables quedaría mal y quieres hacer que solamente se vea el variable del arma que llevas equipada?

Cita de: damyrodriiguez en Mayo 12, 2015, 10:10:50 AM
Osea lo que te pasa si pones distintos nombres por ejemplo así.

global.pistola = 350 /// balas
global.escopeta= 150 /// balas

Etc.... Eso? Dices tu que si dibujas todos los variables quedaría mal y quieres hacer que solamente se vea el variable del arma que llevas equipada?

si es eso... por ejemplo, global.ammopistola = 20; (quiero que esa variable solo me salga cuando el obj_p_pistola esté en el room, y cuando el objeto pistola cambie al de la escopeta, que se dibuje la variable global.ammoescopeta = 10 y que cuando vuelva a recoger el arma (pistola) se me queden las balas guardadas que tenia anteriormente...
no se si me expliqué bien...xDD
Muchas gracias

Eso seria fácil.
Es crear una viable intermedia, que sea la que se dibuja

if  equipado = pistola
  adibujar = ammopistola
if equipado = escopeta
  adibujar = ammoescopeta

Y asi con cada arma.

#6 Mayo 13, 2015, 07:49:06 AM Ultima modificación: Mayo 13, 2015, 07:52:56 AM por damyrodriiguez
 si lo que quieres es queda se dibuje el variable del arma que utilizas pues has esto..

Súper facil.. Ve a evento draw y abre un execute conde.. Y escribe:

if global.pistola = 1 ///
{draw_text(view_xview+0,view_yview+0,global.ammopistol)
}
else
if global.escopeta =1
{
draw_text(view_xview+0,view_yview+0,global.ammoescopeta)
}

Y lo mismo con el resto de las armas.. Ten en cuenta que el variable que solo tiene el nombre del arma es el arma y el que lleva "ammo" y el nombre son las balas... Has esto en un obj_varcontroller
. suerte
.

Cita de: damyrodriiguez en Mayo 13, 2015, 07:49:06 AM
si lo que quieres es queda se dibuje el variable del arma que utilizas pues has esto..

Súper facil.. Ve a evento draw y abre un execute conde.. Y escribe:

if global.pistola = 1 ///
{draw_text(view_xview+0,view_yview+0,global.ammopistol)
}
else
if global.escopeta =1
{
draw_text(view_xview+0,view_yview+0,global.ammoescopeta)
}

Y lo mismo con el resto de las armas.. Ten en cuenta que el variable que solo tiene el nombre del arma es el arma y el que lleva "ammo" y el nombre son las balas... Has esto en un obj_varcontroller
. suerte
.

Lo hice pero no me sirvió, pero creo que encontré el fallo de porque no funcionaba...
para que funcione bien tengo también que crear las variables activado y desactivado no? es decir, tengo que añadir en el evento create de los objetos del jugador cuando (por ejemplo) el obj_pistola esta activado entonces obj_escopeta y demás estan desactivados y asi con todos no? o valdría con hacerlo en el padre del jugador?
ese creo que fue el fallo, no es asi?
si no es así por favor decirme como puedo solucionar eso, o como puedo crear algún tipo de marcador para la variable que estoy usando y tenerlas todas impresas en el room.
muchas gracias por tener tanta paciencia conmigo xD :D

#8 Mayo 14, 2015, 08:11:55 AM Ultima modificación: Mayo 14, 2015, 08:32:05 AM por penumbra
Cita de: WolfIng Entertainment en Mayo 14, 2015, 07:56:41 AM
para que funcione bien tengo también que crear las variables activado y desactivado no? es decir, tengo que añadir en el evento create de los objetos del jugador cuando (por ejemplo) el obj_pistola esta activado entonces obj_escopeta y demás estan desactivados y asi con todos no?

Precísamente, por eso mencioné...
Cita de: penumbra en Mayo 11, 2015, 06:17:34 AM
Parece que estás usando distintos objetos para cada arma. En ese caso, se necesita saber qué objeto arma tienes equipado actualmente. Por ejemplo, considerando que usas  global.ammo:

[gml]
global.ammo = objeto_equipado.balas   //objeto_equipado puede ser un identificador de instancia o un índice de objeto.
[/gml]

Objeto_equipado es la variable que indica qué objeto está activo (equipado, seleccionado) en ese momento. Por eso mencioné (repito, mencioné  XD) que lo que se almacena en esa variable es el identificador de la instancia del arma o su índice de objeto (no es necesario saber cuáles armas están inactivos, en realidad, no importa, sólo la seleccionada).

Como mencioné antes, usar distintos objetos arma está bien, pero no es necesario, todo se puede implementar usando arreglos (variables), por ejemplo
[gml]
pistola = 1
escopeta = 2
uzi = 3

//Almacenamos el nombre de cada arma
armas[pistola, 0] = "pistola magnum"
armas[escopeta, 0] = "escopeta superpoderosa"
armas[uzi, 0] = "subfusil uzi"

//Almacenamos el número de balas de cada arma
armas[pistola, 1] =  25
armas[escopeta, 1] = 20
armas[uzi, 1] = 30

//Almacenamos la magnitud de daño que hace cada munición
armas[pistola, 2] =  5
armas[escopeta, 2] = 15
armas[uzi, 2] = 5
[/gml]
De esta manera, para saber cuántas balas tiene la uzi (si es la activa)
[gml]
global.ammo = armas[uzi, 1]
[/gml]