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 - DarkKRuleR

481
grax, pero el problema no era ese sino localizar al objeto dentro del cono.

News: CREO que POR FIN LO LOGRÉ! He estao provando y parece funcionar pero no lo tengo claro. Me ha costao por dios. Es una solución seguramente ineficiente, bueno, si la queréis ver y decirme pero yo veo que no es eficiente,aunque es mejor que nada... ninguna otra cosa me funcionó.

//LLAMAR DESDE EL OBJETO OBJETIVO A ESTAR DENTRO DEL CONO.
//ObjM es el personaje que mira al ratón (dirección del cono).
//argument0 = amplitud del cono
//argument1 = distancia max del cono
var mira; mira = round(point_direction(objM.x, objM.y, mouse_x, mouse_y));
//mira = dirección a donde miramos
var busca; busca = round(point_direction(objM.x, objM.y, x, y));
//busca = dirección en la que se encuentra el objeto a buscar
//mira y busca deben separarse no más de la amplitud deseada, ese número será "valor"
var a, b;
for (a = 0; a < 360; a += 1) {
    if (a == mira) break;
}
for (b = 0; b < 360; b += 1) {
    if (b == busca) break;
}
if (a > b) valor = a-b; else valor = b-a;

if (distance_to_object(objM) <= argument1 and valor <= argument0/2) return true;
else return false;


la función se llama DESDE EL OBJETIVO, por ejemplo una caja que queremos ver si está dentro del cono, y objM es el personaje. Por ejemplo, si queremos "que toda mariposa dentro del cono del personaje vaya volando", EN EL OBJETO MARIPOSA, llamamos a la funcion.
la funcion no sirve para llamarla desde el personaje y ver si detecta a un enemigo en el cono, sino para llamarla desde el objeto y ver si el personaje lo está mirando (ya haré otra version apra la primera, pero necesitaba una versión así en este caso)
482
Preguntas y respuestas / Problemas con los ángulos
Junio 25, 2013, 04:13:14 PM
Buenas a todos! Pues tantos años de comenzar proyectos (para mí) increíbles, y de dejar la mayoría por costar hacer las animaciones gráficas (todos abandonados) me decidí a intentar un "minijuego". No lo es, pues será MUY complejo, pero será estilo gráficos muy simples (la historia lo justifica).

Pongamos al personaje y objetos pequeños por el escenario. Quiero "afectar" sólo a los objetos situados en un cono delante del personaje a donde él mira según el ratón. Tengo esto:

if (point_direction(objM.x, objM.y, x, y) <= ang(45+point_direction(objM.x, objM.y, mouse_x, mouse_y))
        or point_direction(objM.x, objM.y, x, y) >= ang(315+point_direction(objM.x, objM.y, mouse_x, mouse_y)))


ang es una función que ajusta ángulos (si se pone <0 o >359 suma o resta 360 para ajustar). Pero no funciona!

En el caso más simple, mirando a la derecha con el ratón, la suma del lado derecho de la ecuación que tiene el point direction da 0, pues el personaje está a la izquierda y el objeto a la derecha, y dará cero. Así, en el primer caso, si el ángulo entre el personaje y el objeto (x, y son las coordenadas del objeto, objM.x del personaje) es menor o igual que 45 o mayor o igual que 315, ok.

ESO DEBERÍA afectar a todos los objetos situados en un cono de 90 grados si miro a la derecha. Y, sumando el point direction según el ángulo entre objM (personaje) y el ratón, debería funcionar para tdos los lados...

qué hago mal? Espero que se entienda. El personaje mira hacia donde está el ratón, y quiero que "Lance rayos" que tienen una cobertura de 90º, "afectando" a todo objeto dentro del cono, comparando los ángulos, pero no me funciona.

PD: preferiría no usar un objeto con un sprite con forma de cono, pues la distancia del cono variará, y también su anchura en grados variará, prefiero hacerlo matemáticamente comparando ángulos.
483
Vale, creo que lo estoy solucionando, al final hago un objeto controlador, con un array de las id's de todas las tiles. O sea, un objeto por tile que pongo en la room, ese objeto crea la tile, guarda su id en el controlador y se destruye, así tengo todas las tiles y sus ids guardadas para trabajar con ellas.

Cuando lo pruebe (que lleva su tiempo prepararlo todo) comento si el juego no se ralentiza, de momento pinta que es posible, falta ver si es más eficiente
484
Buenash! Pues tengo esta gran duda, pues no es normal que el juego se me ralentice sin casi tener nada...

no uso tiles, sino objetos. Es necesario pues las tiles deben ser dinámicas: a parte de modificar su xscale, modifican su x según una variable local que ellas tienen (con un valor distinto en cada tile) y demás cosas. Pero claro, me va lento. Cada objeto sólo tiene, en el draw, dos draw_sprite_ext (1 para la tile en sí y otra para dibujar sombra encima) pero parece que eso lo ralentiza.

Podría hacer varias cosas. Que el objeto no use el evento draw, y en su lugar cree un segundo objeto para la sombra. Duplicar el número de objetos para no usar evento draw, pero no parece viable.

Mirando, he visto que puedes modificar las coordenadas y el image_xscale de las tiles. Sería genial si pudiera decirlo para todas, pero sólo funciona dando el id...

así que, habría alguna manera... de decir, teniendo un objeto controlador para todas las tiles, cuando ese objeto reaccione (cuando cierta variable tome cierto valor) que diga:


with(tile1) {
//código que sume la coordenada x o cambie el image_xscale según los resultados de unos if's else's
} with(tile2) {
//código que sume la coordenada x o cambie el image_xscale según los resultados de unos if's else's
}


Pero claro, PODRÍA FUNCIONAR pero necesito la ID.
Quizás, al crear la room, meter en un array las id's de todas las tiles del mismo tipo o algo así...

a ver, quizás sería más eficiente, pues podría usar tiles y sólo 1 objeto controlador (al parecer el evento draw lo hace superlento aunque sólo tenga 2 draw_sprite), pero no sé cómo hacerlo pues sólo funciona con las id's, y debería poder decirle "haz esto para todas las tiles llamadas tal"
485
graciass, al final me he liao, he hecho muchos intentos y he lograo solucionarlo, de alguna forma, "quitando" los suelos que interfieren en el momento de chequear y poniéndolos de nuevo al acabar. Un jaleo, pero por fin parece que lo tengo!
486
Buenash! Tanto tiempo sin trabajar con Game Maker, y ahora estoy metidísimo en un proyecto con un amigo (yo programo y dibujo, él me ayuda en la historia y diálogos).

Quizás alguien me recuerde hace varios... años?, donde subí una demo de Shadow's Destiny: Ragnarok (una sombra con una armadura guay que se transformaba en armas, una villa arrasada, unos templos... la imagen del medio en mi firma desactualizada, el tema de la demo ya fue borrado), pues en nada tendréis demo de una versión alternativa de ello, la "segunda" parte del juego nunca acabado (básicamente el mismo juego, con nuevos protas, nueva historia, nuevo gameplay...y la historia situada justo después de la hipotética historia de ese juego)

La cosa es, en cierto momento utilizo instance_place para checar si hay suelo bajo mis pies, y en función de ello parar la gravedad o seguir cayendo. La cosa es, que en una situación (aunque parezca raro pasa, es debido a mi sistema de juego) tengo 5 suelos justo encima de otro.

La cuestión es: cuando hay 5 objetos iguales uno encima de otro, un instance_place cómo trabaja con ellos? Si no me equivoco mirará uno y devolverá su id. En ese caso cuál de los 5 mira primero, el de menor ir, el de mayor id, al azar? (Esta es una duda "auxiliar", a lo mejor resolviendo esta PEQUEÑA duda puedo resolver el problema mayor, es un acercamiento)
487
Cita de: Maitreya en Diciembre 06, 2012, 02:36:26 AM
En el post que cité dice
Cita de: BleedAbout 2048 characters (local variable) for game maker 8, not sure about 8.1 though.
Hice la prueba en :GM8:.1 y parece que no tuviera limite, o que el limite fuera la memoria disponible.
dejo el ejemplo adjunto.
PD: no traten de hacer iteraciones mayores a 50000 a la vez.

Efectivamente yo he superado ese límite muchas veces. La cuestión es si realmente un string usa memoria dinámica y va cogiendo memoria y memoria a medida que se hace largo, en cuyo caso podría ser IGUAL DE EFICIENTE un solo string que meter muchos string por partes, pues ocuparían lo mismo. En ese caso sería genial!
488
El problema es que se llene el string y se colapse xD

entonces supongo que haré eso, un vector de 100 posiciones donde cada una sea un string gordo, al llenarse uno pasamos a escribir el siguiente, y los mostramos todos en pantalla dejando una distancia fija entre cada uno.

Así entrando no tengo ni idea de cómo programarlo, pero todo es ponerme a ello. Dejo esto así, si no logro programarlo o si me pasa algo aviso, y si alguien tiene otra idea pues también la comenta. Así que el tema sigue abierto, ya os contaré o me contaréis ^^
489
Buenas! Pues en mi programa, tengo una variable string donde voy guardando todo lo que pasa. Es un juego de cartas y cada vez que el usuario hace algo se añade una nueva línea a la variable (log += "#Nueva línea!"). Cosas del tipo "Jugador A roba una carta", "Jugador A suma 10 Vidas a Jugador A", etc. Fácilmente puedo ir añadiendo nuevas líneas al string sumando un string nuevo a la variable string, y ello lo añade automáticamente, y haciendo un draw_text con una y que pueda modificar con las flechas me muevo por el texto.

El  problema es que esta variable podría hacerse muy larga y contener MUCHO texto. Así que... un string tendría número máximo de carácteres? si lo tiene, qué sería recomendable hacerme? un array de... 100 posiciones de strings, y cuando uno se vaya a llenar paso al siguiente? si no tiene tamaño máximo igualmente debería hacer lo anterior, u otra cosa, para que sea más eficiente y no se bloquee, o da igual?
490
Preguntas y respuestas / Re:como funciona for?
Noviembre 25, 2012, 02:06:31 AM
Un ejemplo sencillo te lo explicará todo, es la forma más fácil.

for (i = 0; i < 5; i += 1) {show_message(i);}

eso mostrará estos mensajes en este orden:
0
1
2
3
4

eso lo explica todo. En palabras ese for hace "comenzamos con i=0 y hacemos X cosa, luego sumamos 1 a i, volvemos a hacer X cosa, volvemos a sumar 1 a i... y seguimos haciendo mientras i sea menor a 5. En el momento en que sumamos 1 a i e i valga 5 ya no hacemos X cosa y el for termina". hacer X cosa es lo que hay dentro de los {}. Con este ejemplo parece tontería pero los fors son la cosa más útil del mundo. Yo mismo los estoy usando ahora para programar un juego de cartas: para llevar la cuenta de las cartas de la baraja y tal es MUY necesario.

pd- for (i = 10; i > 20; i -= 1) en este caso este for no tiene sentido, pues comenzamos con i = 10, y como no es cierto que sea mayor que 20 pues falla y termina (como otro ejemplo, vamos xD)
491
Resuelto! Hice en el end step del controlador que, si una variabble es falsa, gestione todo y haga el sprite_add a cada carta por el valor guardado. EL savegame solo contendrá en cada carta un string con la direccion a su imagen, y al final de cada turno la variable se pone a true para que al proximo turno vuelvan a cargarlas. Las cartas se cargan en cada turno y el savegame solo pasa la direccion para cargarlas ( y las posiciones, parametros, vidas, etc). Con esto se ralentiza 2 segundos al cargar el turno, pero importa nada. Gracias! ^^
492
Gracias, no entiendo exactamente a qué te refieres. El Master hace 120 sprite_add para cargar todas las cartas. Tanto el master como el usuario tenemos en el mismo directorio las cartas para cargar correctamente.
Entonces, cuando cargamos partida: a caso el archivo de partida no debería contener las 120 variables con las cartas cargadas mediante sprite_add? Cuando ejecutas en modo usuario (cargar) cargas la partida comenzada por el master, en la cual se cargaron las cartas con sprite_add, conque el SAVEGAME debería contener eso.

Exactamente que es ineficiente o más recomendable? podría hacer que el master no cargara con sprite add, sino que guardara la direccion de las imagenes, y entonces el usuario, al iniciar, hiciera los sprite_add, y al guardar el usuario solo guardaría el contexto, lo que se guardaria seria la direccion de las imagenes (working_directory + "/cartas/etc") para que a cada ronda se carguen. Así el archivo de guardado no pesaría nada, ya que sólo contendría direcciones, y quizás no habría errores. No sé cómo pero tu mensaje me hizo darme cuenta, avísame si es cierto esto que digo y sería más eficiente esta forma.

Pues de momento no me funciona, las cartas salen con sus imágenes predeterminadas cuando deberían actualizarse... al guardar asigno a cada carta una variable con la dirección de una carta, y al cargar la propia carta debería hacer sprite_load con esa dirección... seguiré probando

pd- no sé a qué te refieres con actualizar cartas, simplemente el savegame contiene qué cartas tiene cada uno y su posicion en el campo, entre otros parámetros (vida, numero de turno...). EL usuario también tiene las carpetas con las cartas para que su programa pueda hacer sprite_add con las direcciones que tiene el savegame que le he pasado...
493
Buenash! Pues estoy con un programita para llevar batallas de cartas, sin online, donde cada usuario hace su turno en el juego, acaba, genera un savegame que le pasa al rival para que continue, etc etc, pasándose savegames. Pero ahora que hago pruebas me da error...

al comenzar debes introducir el modo: modo usuario o modo maestro, el cual solo uso yo y requiere contraseña. Yo uso el modo maestro e introduzco las 60 cartas de cada jugador, ahí la partida se guarda. Entonces, el usuario va al modo usuario, donde automaticamente carga partida para que pueda jugar directamente a la partida que yo le he creado. Pero cuando carga da este error:

ERROR in
action number 1
of Draw Event
for object obj_carta:

Trying to draw non-existing sprite.


ERROR in
action number 1
of Draw Event
for object obj_carta:

Trying to draw non-existing sprite.


ERROR in
action

etc etc. todas las cartas fallan al cargar por perder su sprite.
En el orden tengo, en pseucodigo: "si entras en modo master, hay un menu para introducir la direccion de cada carta para que el programa las cargue con sprite_add desde una carpeta. LUEGO guarda partida". LUEGO DE ESO, hay otra parte de codigo con "si estas en modo usuario carga partida"

en teoria cuando el usuario carga la partida debería cargar la partida guardada justo despues de introducir las direcciones de las cartas, pero en el error pone que no encuentra esas direcciones, como si nunca las hubiera introducido!!
Sabéis qué pasa o debo daros más datos? la idea es que yo entro en modo Master para introducir las cartas de cada usuario (debe ser a mano, introduzco la direccion de todas las cartas, por ejemplo pongo /cartas/1-20/carta.png), y ahí se guarda. Luego, si entras en modo usuario, directamente te debería cargar la partida guardada en la que "eras" Master, que da igual pues después de ambos modos solamente te pregunta una contraseña, para asegurar que eres el jugador 1, y hacer tu turno.


-PD: intuyo que el problema puede ser, que el usuario carga una partida donde se han introducido las cartas, pero en su partida no se ha hecho, y al cargar no lo encuentra. Pero no lo creo pues al cargar tambien deberías cargar las cartas que introdujo el Master...
494
Preguntas y respuestas / Re:Skew al dibujar
Noviembre 18, 2012, 03:25:37 PM
Encontrado: http://gmc.yoyogames.com/index.php?showtopic=493190, pero no puedo eliminar mis temas así que si alguien lo cierra... ^^
495
Preguntas y respuestas / [Solucionado] Skew al dibujar
Noviembre 18, 2012, 02:32:19 PM
Buenas! Pues el título lo dice todo. Es posible aplicar un efecto Skew en un draw_sprite? (sprites - Transform - Skew).
Si se puede me vendría genial, ya que para las miniaturas de las cartas que tengo en el campo, están en perspectiva conque me molaría hacerles Skew. Si no se puede pues a todas las cartas les pondré una imagen predefinida y ale.