Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - vampy09

226
Jangse, la aplicacion funciona al 100%.
Gran aporte!
Saludos!
227
Para crear Inteligencias Artificiales (IA) de enemigos te recomendaria pobrar primero con Timelines y Alarmas, pero si tienes experiencia en GML, busca todo lo que puedas sobre Finite State Machines aplicado al GM.


228
Cita de: Iros en Febrero 07, 2014, 12:22:04 AM
El código que puso vampy09 se usa a menudo para almacenar mapas externamente y cargarlos para así ahorrar poner tantos objetos desde un principio y el juego pese menos (el ejecutable).

Yo personalmente uso mucho las matrices en C++ para "dibujarlas", es decir que tengan un patrón con números al azar y el resto cero ...

WOW Iros! Me has abierto la puerta a un nuevo nivel ! :-)

El ejemplo que pones de como poder aplicar mi ejemplo  es sumamente PRACTICO!
Has hecho que me explote la cabeza de tanto pensar en las maneras en como podria aplicarlo! XD
Sin duda conoces ! ;-)
Saludos
229
Ayer "curiosiando" por la gmc, me encontre con este uso de un arreglo:
//8*8 = 64, el largo del texto DEBE ser de 64 caracteres
//primero crea tu texto como si fuera una matrix 2D, pon una "X" dondo quieras que se cree un objeto
Array8x8 = " 00000000
                      0XX00XX0
                      0XX00XX0
                      00000000
                      00000000
                      0X0000X0
                      00000000
                 
//Ahora concatena los 8 segmentos en orden.
Arreglo8*8="OOOOOOOOOXXOOXXOOXXOOXXOOOOOOOOOOOOOOOOOOXOOOOXOOOXXXXOOOOOOOOOO";
//Crea las instancias del objeto que tu deseeas
for ( i =0; i < 64; i + 8 )
    {
      for ( j = 0; j < 8; j += 1)
          {
          if ( string_char_at(Array8*8, j + i + 1) == "X");
             {
               instance_create(x + j * 16, y + i * 2, objetoacrear);
              }
          }
      }
Osea crear un objeto cuando la funcion devuelva una "X" como valor del elemento del  Arreglo8*8 logrando crear un patron. El ejemplo crea una carita feliz.
230
Un arrreglo puede ser:
unidimensional >> score[20]
bidimensionales >> score[10,20]
tridimensionales >> score[10,20,5]
tetradimensionales >> score[10,20,5,5]

Cuando un arreglo es unidimensional se llama Vector o simplemente Arreglo.
Cuando un arreglo es bi,tri o tetradimensional se llama Matriz.

Yo en lo personal nunca he usado una Matriz tri o tetradimensional.
231
Cuando inicie el uso del GM tenia tus mismas dudas: Cuantos objetos debere utilizar, etc etc.
Aunque el GM tiene su limites y ciertos consejos a seguir que previenen bajonazos en su perfomance ( ej. desactivar el usar color en el background del room si usas una imagen como background) el GM tambien tiene sus fortalezas.(especialmente en 2D)
Como consejo, si estas empezando, es tratar de dejar de lado un poco eso pensamientos porque sin darte cuenta estas "atando' tu creatividad, dado que le estas poniendo limites.
Mi consejo es que has tu juego como tu quieras y luego "busca la manera"  que el GM lo logre, sin importar cuanto codigo, objectos etc. utilices.
Trata siempre que el GM se adapte o module a tus ideas y no adaptes tus ideas al GM, el GM es solo una HERRAMIENTA que tendra el poder que tus ideas le den!
232
Le respuesta de penumbra es exelente!, posteo la mia porque ya la habia escrito :-P

El potencial de los arreglos es que permiten almacenar mas un elemento, del mismo tipo (numerico, texto) a la vez. Osea el arreglo es un grupo de variables dentro de una sola variable.
Ej : Tienes 20 rooms, cada room tiene un highscore.
a) Podrias crear 20 variables, una para cada highscore de cada room:
high_score_room1, high_score_room2, >> high_score_room30
b) o crear un arreglo de 20 elementos
high_score[20]
Dado que un arreglo es un tipo de variable la puedes usar como una variable normal.
Ej:
Deseamos asignar el valor del higscore del room 14
a) high_score_room14 = 1500;

b) high_score[14] = 1500;

Osea que hay que decirle al arreglo a cual elemento se le asigar el valor, lo cual lo hacemos con el # que esta dentro los parentesis, osea el indice ( este ejemplo el elemento 14)

Pero el maximo potencial de un arreglo se logra cuando se utiliza en conjunto con el ciclo FOR.
Ej: deseas que los highscores de todos de los 20 rooms inicie en 0:
a) inicialisas cada variable de forma "manual"
high_score_room1 = 0;
high_score_room2 = 0;
...
high_score_room30 = 0;

b) o poner un arreglo dentro de un ciclo FOR:

for (i = 1; i <= 20; i++)
    {
      high_score = 0;
     }

Que secude en el ejemplo b) ?
1) el GM lee la palabra reservada "for", que indica que lo sigue es un ciclo for.
2)lo primero que hay dentro del parentesis es la declaracion de la variable "i" y la que se le asigna el valor de 1.
3)Evalua que la condicion, este caso " i <= 20 ", se cumpla, osea se verdadera.
4)Entra al ciclo.
5)La primera y unica sentencia dentro del ciclo indica que al elemento que se encuentra en el indice del arreglo high_score se le asigne el valor de 0. En este momento del ciclo "i" tiene el valor de 1, lo mismo que "high_score[1] = 0;"
6)Dado que no hay nada mas despues, se la sale del ciclo.
7)Cada vez que se realice un ciclo ( una iteracion ) se va ha realizar lo que se encuentra al final del parentesis, en este caso "i++", osea "i = i + 1" ( opcion Relative en Drag n Drop), por lo que a la variable "i" quedara con un valor de 2.
8)De nuevo se evalua la condicion " i <= 20 ", dado que se cumple se entra de nuevo al ciclo, de nuevo se realiza lo que esta dentro del ciclo, con la diferencia que ahora "i =2" por consiguiente ahora a la variable que se le asignara el valor de 0 es a la que se encuentra en el indice high_score[2], osea la siguiente.
9)Este se repetira hasta que la condicion "i <= 20" no se cumpla.

Para que podrias utilizar arreglos?
Menus, inventarios, etc pero principalmente cuando necesites almacenar conjuntos de valores de un mismo tipo.
Espero no haberme exedido con mi respuesta.
Saludos!
233
Preguntas y respuestas / Re:ayuda a terminar codigo
Febrero 04, 2014, 10:46:50 PM
Trata con poner este codigo en el evento STEP del objeto player2

Evento Step

if ( place_meeting(x,y,player1)
{scr_drawattack2(ord(true), stand, jab, jab_box, 5, 'normal')}
else
{scr_drawattack2(ord(false), stand, jab, jab_box, 5, 'normal')}
234
Bueno segun tengo entendido el evento Create sucede ANTES que el evento Room Start. En MI opinion, creo que el evento Room Start esta "relacionado" con el Creation Code del room.
Aunque aclaro: no es su unico proposito.
Pero si has logrado que funcione como tu deseas, pues Enhorabuena! Eso es lo que importa!
Saludos!
235
Haz la variable velocidad global:

Creation Code Room

global.velocidad =4;


Evento Other Room Start obj_jugador

speed = global.velacidad;

De esta forma ahora si speed tendra acceso al valor que tenga velocidad.
236
Preguntas y respuestas / Re:ayuda a terminar codigo
Febrero 03, 2014, 06:27:19 AM
Primero:
La funcion instance_exist() devuelve dos valores:
true // si existe dentro del room al menos una instancia del objeto que hayas puesto dentro de los parentesis
false // si no existe al menos una ...
Ahora tu codigo:
Primero: no pones en que evento lo usas o si es un script.
Segundo: como consejo nada mas, es que trates de nombrar tus variables, objetos etc. con nombres un poco mas representivos ej:
posicion_x, obj_jugador, sprite_lado_der
Permite que tu codigo sea mas facil de leer, por ti y por otros.
Al codigo:
Declaras tres variables he inicialisas una
cas = instance_exist(obj_Aa) // cas va hacer true o false dependiendo si el obj_Aa existe

En la siguiente linea pones if (instance_exist(obj_Aa) entonces si esto es verdadero cas = true sino cas = false; osea lo  MISMO que la sentencia anterior!

Seguido pones una secuencia de IF que provoca que si al menos una instancia del obj_Bb O del obj_Cc O del obj_Dd existe, cas = false sino cas = true, osea:
if ( instance_exist(obj_Bb) or instance_exist(obj_Cc) or instance_exist(obj_Dd) )
{
  cas = false;
}
else
{
   cas = true;
}

La ultima linea provoca que si cas = true se ejecute el script.
Hago esta lectura de tu codigo para que me ayudes a entenderlo.
Te pregunto ¿ A que te refieres con que deseas que "la accion se realise una vez y se destruya"?
Por que las instancias (objetos) son las unicas que se destruyen y las ACCIONES se ejecutan segun el orden en que las pongas,dependiendo del EVENTO en que se hayen ubicadas.
Salidos!
237
Extracto del manual del GM
"So, for example, the room-start events can use variables set by the creation code for the room..." ( Entonces, por ejemlo, el evento Room Start puede USAR variables inicialisadas por el Creation Code del room...)
Por lo cual segundo a penumbra, deverias inicialisar la variable en el Creation Code del room con la velocidad que deses que el obj_jugador tenga en ese room, esto debes hacerlo con cada room:
velacidad_local = 8; // uso el mismo ejemplo de penumbra :-P

Luego en el evento Other / Room Start del obj_jugador pones:
speed = velocidad_local;

De esta forma la variable speed tomara el valor que tu le hayas asignado a la variable velocidad_local en el Creation Code del room.
238
Cita de: Jangse en Febrero 02, 2014, 12:25:36 PM
Cita de: vampy09 en Febrero 02, 2014, 03:08:31 AM
obj_Control.lives = 1;
Significa que a la variable lives del obj_Control se le va ha asignar el valor de 1


Bueno, yo a lo que me refiero es que sin poner delante de la variable lives el obj_control el código me funciona igual. Ya que tanto lives, health, score son tratadas por game maker como variables globales. Y en el step de nuestro personaje pongo así el código y me funciona perfectamente.

No es que no entiendas como se usa el "." sino que utilizarlo con varibles como health o lives o en tu codigo es redundante. Tienes toda la razon! Disculpa es que aveces no leo con cuidado. :-P
Con respecto al los graficos, siendo sincero para mi es la primera vez que en juego de GM que veo este efecto. Se y entiendo que tu juego esta en una etapa beta y mucho del juego puede llegar a cambiar, pero en humilde mi opinion, esta efecto aporta mucha personalidad a los graficos y logra la sensacion de un arcade retro.
Saludos
239
obj_Control.lives = 1;
Significa que a la variable lives del obj_Control se le va ha asignar el valor de 1
El punto indica a que objeto se va aplicar la funcion o en este caso la modificacion de la variable lives, osea el punto indica que lo que esta del lado derecho del punto se le va ha aplicar a lo que este del lado izquierdo. 
Esto permite realizar cambios a variables, llamar funciones, comparar el valor de una variable etc. de un objeto dentro de otro. Es como un control remoto.
Es lo mismo que cuando usas Drag n Drop y de las tres opciones: self,other,object, seleccionaras object, luego sale un menu en el que debes escojer el objeto al que deseas que se le aplique la accion.
Se le conoce como operador selector de miembro/instancia
240
Ampliando la respuesta de penumbra
El problema era que tu codigo siempre mostraba algun valor en la parte de ENERGIA cuando la caja de texto GAME OVER aparecia.
Error se daba en esta parte del codigo:

else
       {
         show_message("Game Over");
         restart_game();
        }
Osea "congelar" (freeze) el juego mientras que se muestre la caja de texto con el texto
"GAME OVER" hasta que se presione el boton OK de la caja de texto, cuando esto suceda( cklick en Ok) debe reiniciar el juego.
Entonces? ... Bueno que no estamos "dejando" que el GM muestre los valores que este paso le esta asignando a las variables health y lives, porque congelamos el juego y inmediatamente despues reiniciamos el juego.
El reiniciar el juego, evitaba que el evento DRAW (que va algo despues de ENDSTEP) dibuje en la pantalla el nuevo valor de health.
Por cierto me gusta mucho el efecto de "scalines" que aplicas al juego.
Saludos !