hola, bueno... estoy haciendo un juego de cartas para pc llamado Truco (Si lo conocen... mejor) en especial la versión argentina...
El problema es que yo quiero darles el efecto de repartir las cartas... que se deslicen hasta "la mano" del jugador...
Tenia la idea de hacerlo con move_towards_point pero no se como hacer que las cartas se detengan porque si bien el codigo funciona, al llegar al punto (ej.: 300;300) las cartas siguen de largo!!
Alguien me ayudaria? :)
para detener un objeto sobre las cordenadas X e Y
puedes poner dependiendo la condicion
hspeed=0; //se detiene el movimiento horizontal
vspeed=0; // se detiene el movimiento vertical
Ejemplo:
if(carta.y< 300) checamos que la posicion Y de la carta sea menor a 300 del room o de la view en cuestion
{
// y que cuando pase de esos 300 se detenga
hspeed=0;
vspeed=0;
}
creo que podria servir en el evento step, no se como tu lo quieres aplicar, pero creo es con
esto es suficiente para detener objetos en donde quieres.
tambien puedes hacer un objeto invisible y que cuando la carta colisione con el
que se detenga el objeto, con las propiedades descritas anteriormente.
Somnus, las dos ideas que me diste funcionaron pero no del todo...
el problema de ahora es que el objeto carta, al crearse crea un sprite de la baraja al azar... entonces el juego interpreta que el segundo objeto carta es el mismo que el primero... y los detiene a los dos sea el lugar que esten...
aunque sean objetos iguales, tienen un ID diferente y se pueden manejar individuales
no recuerdo como se hace pero es algo asi:
OB_ID(el id del objeto).hspeed=0;
Saludos Makero MaxiLBPRios:
Cita de: MaxiLBPRios en Marzo 12, 2012, 08:53:20 PM
Somnus, las dos ideas que me diste funcionaron pero no del todo...
el problema de ahora es que el objeto carta, al crearse crea un sprite de la baraja al azar... entonces el juego interpreta que el segundo objeto carta es el mismo que el primero... y los detiene a los dos sea el lugar que esten...
¿Ya intentaste recoger los ID de cada objeto carta?
Cada objeto es único dentro del juego en "Game Maker". Su particularidad la brinda un número entero llamado ID.
Cada vez que se crea un objeto con la función "instance_create(x,y,obj)", esta devuelve el ID de ese objeto creado.
Mi propuesta es que crees una lista donde recojas los ID de los objetos carta que vas a utilizar. Cada vez que llames a una carta, refiérete por su ID. Si llamas por el nombre del objeto, la llamada es genérica a todos los objetos de igual nombre, con el ID es particular.
¿No se si llegas a entender? También te recomiendo, antes de realizar algún proyecto, que leas y realices los tutoriales del programa. Ganarás en conocimiento básico del GML y avanzarás con mayor soltura en tus juegos.
Espero te sirva de algo.
Gracias por la atención y disculpa las molestias causadas...
bueno ferhand... voy a ver si funciona :) yo tenia una idea de usar las id de los objetos pero no sabia cómo...
y la verdad es que de :GM8: SABIA... pero hace unos años que no lo uso... parece que voy a necesitar volver a los manuales y tutos GM :)
EDIT: che... estoy muuuy perdido... esto lo pongo en otro tema pero... como obtengo las id? vi en yoyo games y aca pero nada me ayudo! :( http://www.comunidadgm.org/index.php?topic=16668.0
a ver intenta lo siguiente.
Si lo que quieres es detener un objeto en particular intenta con "self"
en donde haces que se detenga el objeto pon esto
self.hspeed=0;
self.vspeed=0;
y me dices si funciona, asi este codigo lo que hace es poner la velocidad horizontal y vertical de ese mismo objeto a cero.
Hola Makero MaxiLBPRios:
CitarEDIT: che... estoy muuuy perdido... esto lo pongo en otro tema pero... como obtengo las id? vi en yoyo games y aca pero nada me ayudo! :( http://www.comunidadgm.org/index.php?topic=16668.0
Haber cómo te explico...
Si lo que quieres es tener el control de cada carta, puedes hacer esto.
Primero: En el evento "create", del objeto que crea a las cartas y controla el juego, llamésmosle "obj_control", debes crear una lista que llamaremos listadecartas [ listadecartas = ds_list_create(); ] y también una variable donde tendrás las cartas a mano para su manipulación. Llamémosle carta1 [ carta1 = ""; ]
Segundo: Donde sea que crees las cartas debes pasar el ID de cada carta creada a la lista para tenerlas guardadas. [ ds_list_add(listadecartas, instance_create(x, y, obj_carta)); ] o si prefieres tener a mano la última carta creada
[
carta1 = instance_create(x,y,obj_carta);
ds_list_add(listadecartas, carta1);
]
Las cartas creadas, quiero decir sus ID, se guardan en la lista listadecartas en el orden en que son creadas. Si quieres hacer una lista con otro orden de cartas, simplemente crea otra variable de tipo lista y le agregas los ID de los objetos cartas que están en la lista donde se crearon.
Una forma de identificar las cartas por su tipo, color, etc. es poner variables dentro del obj_carta. Variables como colordelpalo, numeración, palo. ejemplo: el as de corazones sería [ palo = "corazón"; colordelpalo = "rojo"; numeracion = 1; ]
Cada vez que quieras seleccionar una carta de la lista, simplemente extraes el ID para una variable y lo manipulas como un obj_carta cualquiera. ejemplo: Seleccionaremos la primera carta [ carta1 = ds_list_find_value(listadecartas, 0) ]
¿Cómo sabes que cartas tienes en la variable carta1? revisas las variables de palo, colordelpalo, numeracion que identifican a los distintos grupos de cartas. ejemplo:[ (carta1).numeracion ] para la numeracion, etc.
Cuando quieras detener los movimientos de alguna carta utiliza su ID.
No se si comprendes la explicación. De todas formas insisto en que leas los manuales y, más que los manuales,
los tutoriales. Si sigues los tutoriales y los haces no tendrás dudas como estas, las dudas serán de otro tipo.
Espero te sirva de ayuda, gracias por la atención y disculpa las molestias.
Una cosa no use move_towards_point. usa mejor esto para el movimiento de la baraja.
Event create
xx=0 yy=0; //las coordenadas a donde deben llegar las cartas ejemplo 300,300
event step.
if point_distance(x,y,xx,yy)>32
{speed=3; direction=point_direction(x,y,xx,yy);}
else
{if speed>0 {speed-=0.2}
se me ocurre una manera mas sencilla de guardar las id en un arreglo
en ese objeto control crear las instancias.
EVENTO CREATE
cont=0; //el contador de instancias de tal tipo
y donde quieras crear los objetos haces el arreglo
arrCartas[cont]= instance_create(x,y, carta);
cont+=1;
de esa manera insertas en la posicion del arreglo correspondiente y si quieres saber cuantas instancias tienes
pues mandas llamar al contador y se supone que debe de tener tal numero, ahora, ten cuidado al eliminar las
instancias porque tendrias que acomodar de nuevo el arreglo
si tienes 4 cartas y borras la primera, el contador te dira que hay 4, pero tu solo tendras 3, asi que se tiene que reccorrer el arreglo.
Cita de: somnus en Marzo 14, 2012, 04:33:41 PM
se me ocurre una manera mas sencilla de guardar las id en un arreglo
en ese objeto control crear las instancias.
EVENTO CREATE
cont=0; //el contador de instancias de tal tipo
y donde quieras crear los objetos haces el arreglo
arrCartas[cont]= instance_create(x,y, carta);
cont+=1;
de esa manera insertas en la posicion del arreglo correspondiente y si quieres saber cuantas instancias tienes
pues mandas llamar al contador y se supone que debe de tener tal numero, ahora, ten cuidado al eliminar las
instancias porque tendrias que acomodar de nuevo el arreglo
si tienes 4 cartas y borras la primera, el contador te dira que hay 4, pero tu solo tendras 3, asi que se tiene que reccorrer el arreglo.
Makero MaxiLBPRios:
Te evitarás todos estos problemas de "arreglos" si utilizas las "listas".
Es cierto que las "listas" son un poco más lentas para el programa, pero tu juego no es un plataformas, con muchos disparos y colisiones chequeándose a todo momento.
Las "listas" te serán más útiles. A ellas puedes ordenarlas de cualquier modo, borrar espacios o insertar nuevos sin que te cause problemas y, a la hora de saber cuantos "items" hay en ella, te lo dice una función.
Insisto en el estudio de los tutoriales. Verás que esa pregunta es una sencillez de resolver, solo te falta leer.
Gracias por la atención prestada y hasta la próxima.
OK... el tema no esta solucionado pero cierrenlo igual :) ...lo de las listas realmente me ayuda mucho... redirecciona mucho las ideas que tenia en un cuadernillo sobre los codigos que iba a usar pero esta bien... volvi a cero y estoy viendo tutos de cgm y gmc asi que espero que la proxima vez que hable sea para una beta del juego o mejor: su version final :) Gracias a todos por la ayuda y espero yo tambien poder ayudarlos en alguna ocasion :) Nos vemos!