Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: deathmetal en Marzo 09, 2010, 05:50:28 PM

Título: simulacion de mercado
Publicado por: deathmetal en Marzo 09, 2010, 05:50:28 PM
perdonen si ya he posteado esto antes, segun yo si, pero estube buscando el tema y no lo encontre, y segun yo jamas me respondieron pero insistere, si ya habia posteado aceme verlo :)

quiero simular un mercado con personas que se muevan de un lado a otro de manera "natural"

como programar el movimiento aleatorio de personas???

alguna idea?
Título: Re: simulacion de mercado
Publicado por: soccer2008 en Marzo 09, 2010, 05:57:10 PM
pero para q tipo de juego deseas eso??? y es para un juego en 2d o 3d????
Título: Re: simulacion de mercado
Publicado por: Alfonsos1 en Marzo 09, 2010, 06:49:44 PM
la verdad no me imagino mucho que es lo que quieres pero ai te ba:

determina lugares "de estar" en los que las personas estarian un rato, por ejemplo enfrente de los estantes, mirando algun producto, etc.
Luego has que caminen desde el luegar en el que se encuentran hasta otro lugar "de estar" aleatorio, y que el tiempo que permanezcan en ese lugar tambien sea algo aleatorio por ejemplo de 3 a 10 segundos.

Título: Re: simulacion de mercado
Publicado por: soccer2008 en Marzo 09, 2010, 07:34:43 PM
Mira para las personas en el mercado s?lo vas a usar un objeto, en otras palabras el objeto persona  XD XD XD

Cada persona ser? diferente en sus acciones y estas ser?n establecidas x variables en el evento create, x ejemplo:

mentalidad=14; //1-20
velocidad=12; //1-20
reaccion=2 //mientras m?s sea el valor ser? m?s enojon  XD
resistencia=20 //mientras + sea el valor durar? m?s tiempo en el mercado.
direcci?n=1 //esta es la direcci?n donde vive, puedes pones todas las direcciones q quieras.


y otras variables m?s dependiendo de lo q quieres hacer  XD XD XD



Mira la variable velocidad es sumante f?cil, con respecto a la resitencia har?as lo siguiente:

Evento Step:

if (resistencia<1){
   dirigir a la persona donde estan los taxis
}


Evento colisi?n taxi:

object_get_visible(0)//supuestamente est? dentro del taxi



Objeto taxi:

Evento colision persona:

switch con la direcci?n de la persona..


cuando tenga tiempo implemento esto...saludos







Título: Re: simulacion de mercado
Publicado por: deathmetal en Marzo 11, 2010, 07:15:59 AM
eso no es lo que quiero

quiero que las personas se muevan de un lado a otro de manera espontanea como si estuvieran deambulando nomas por todo el room
Título: Re: simulacion de mercado
Publicado por: Fenris78 en Marzo 11, 2010, 09:05:42 AM
Seria conveniente que precisaras un poco mas. Es decir, la perspectiva que tiene el juego, si es preciso evitar determinados obstaculos.. etc.

En un principio, suponiendo que tenga una vista tipo Zelda, se podria hacer algo parecido a esto en cada PNJ:

Código (Evento Create) [Seleccionar]

marg=10;
destx=marg;
desty=marg;
alarm[0]=choose(room_speed,room_speed*3,room_speed*5);
prec=10;
vel=5;


Código (evento alarm 0) [Seleccionar]

destx=random(room_width-marg) if(destx<marg){destx=marg}
desty=random(room_height-marg) if(desty<marg){desty=marg}
alarm[0]=choose(room_speed,room_speed*3,room_speed*5);


Código (evento step) [Seleccionar]

if(distance_to_point(destx,desty)>prec)
{
  move_towards_point(destx,desty,vel);
}


Picha mas o menos, verifica la sintaxis, no tengo GM delante.

Si por ejemplo necesitas que evite obstaculos, puedes sustituir la funcion move_towards_point() por otra mas adecuada. GM dispone de funciones especificas para eso.

Suerte.
Título: Re: simulacion de mercado
Publicado por: soccer2008 en Marzo 12, 2010, 12:33:47 AM

Tiene razon Fenris78, ser?a algo aleatorio nomas...

Bueno te di una idea para q se asemeje a IA, pero si quieres algo espontaneo basta con q uses este c?digo en step:



{
 if (hspeed == 0)
 {
   if (random(3)<1 && place_free(x-4,y))
     { hspeed = -4; vspeed = 0;}
   if (random(3)<1 && place_free(x+4,y))
     { hspeed =  4; vspeed = 0;}
 }
 else
 {
   if (random(3)<1 && place_free(x,y-4))
     { hspeed = 0; vspeed = -4;}
   if (random(3)<1 && place_free(x,y+4))
     { hspeed = 0; vspeed =  4;}
 }
}


este mismo c?digo usas cuando la persona colisiona con un obstaculo...

es cuesti?n de hacerlo de forma aleatoria entonces  XD XD XD