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

166
Las variables var son como una variable normal, se ejecutan cada vez que aparece en el script.
La diferencia es que las var solo pueden ser accedidas dentro de la hoja de script donde fueron definidas, fuera de eso no.

Por ejemplo desde un evento draw, no la reconocería y marcaría como que no existe.
167
Hola amigo, a lo mejor lo que estas buscando es esto:

https://www.youtube.com/watch?v=t8D5WAECKAI

me explayaría mas pero estoy desde un celular bastante malo para escribir,
168
hola amigo, para eso podes usar listas:

gamemaker.info/en/manual/411_03_lists
ahi tenes varias funciones para añadir elementos e incluso ordenar de mayor a menos.
seria cuestion de agregar elementos, ordenarla y dibujar los scores.

Luego para remplazar un elemento tienes la funcion
ds_list_replace(...)Solo tendrias que ir verificando uno a uno los elementos para saber en que lugar remplazarlo.
169
Preguntas y respuestas / Re:¿como automatizar código?
Diciembre 14, 2018, 02:02:25 AM
Dado que no hay un equivalente en las nuevas versiones, tendrias que hacer la asignacion a mano con un script.

scr_asignar
[gml]

argument0 = argument1;
[/gml]
luego deberías usar una variable diferente para cada cosa:
[gml]

for(i=1;i<=2;i+=1)
{if (grupo == "simbolos")
          scr_asignar(var_simbolos, x)
  if (grupo == "fracciones")
          scr_asignar(var_fracciones, x)
}
[/gml]
O bien , crear un array, en el cual cada indice indique una variable:
ev_create
[gml]
grupos[0]=0 //corresponde a conjunto
grupos[1]=0 //corresponde a simbolos
grupos[2]=0 //corresponde a fracciones
[/gml]
luego
[gml]
for(i=1;i<=2;i+=1)
{
          scr_asignar(grupos, x)
}
[/gml]

esas son las ideas que se me ocurren de momento.
170
Preguntas y respuestas / Re:Complejidad del GML
Diciembre 13, 2018, 11:40:09 PM
Todo depende del lenguaje. Por ejemplo si lo comparamos con ANSI C, GML en cuanto al paquete de funciones que trae, es mejor, porque maneja graficos, networking, objetos tipo lista, grid, etc.

Ahora comparado con Java, que por cierto es mas una VM que un lenguaje en si. GML  está bastante muy por debajo, porque no pude crear ventanas, por ejemplo.
Igual, de todas maneras, GML está perfectamente ajustado para su entorno, el Game Maker. Aunque es cierto que lo recortaron en esta version, la de GM8 por ejemplo era bastante potente al poder ejecutar scripts en tiempo real o lanzar programas.


GML es potente, el tema es que al ser un lenguaje dentro de un programa para hacer jueguitos, el procesador se resiente al hacer calculos pesados. Ponerle 1000 instancias cada uno que haga el calculo de una trayectoria, te quema el PC. Por decir alguna gansada, calcular un path, a un camino libre de obstaculos, por ejemplo.



Se puede hacer cosas buenas, si.
Intelgencias artificiales? Seguramente alguna idea habrá por ahi seguro que se intento hacer, pero no estoy al tanto.
Que se va a tildar? Seguro te va a 2 fps XD
No es el lenguaje idoneo ni la herramienta.

Por ultima vez repito, es poderoso? Pos si. Se pueden hacer muchas cosas buenas, el tema es que no sales ganando cuando te va a 3 fps.
171
Ah, viendo un poco el perfil de Tigerito veo que combina Python con GM.
Está bastante buena la idea, nunca se me había ocurrido.  Incluso hasta capaz se puede hacer una DB para registrar ususarios o alguna de esas cosas jaja
172
UDP se utiliza porque envia directamente los paquetes hacia el lugar que le especifiques. Es más, incluso nisiquiera necesita realmente una conexion.

El problema es que:
1) se pueden perder datos al enviarlos
2) pueden llegar unos antes que otros, es decir , desordenados.
Es lo optimo para juegos multijugador en tiempo real? Si. Solo habría que solventar a mano estos inconvenientes.


Bueno, los pasos teoricos que debieran seguirse son:
1) Conseguir un host para colocar el servidor del juego. Crear la partida o bien, preparar la aplicación para que pueda manejar diversas partidas.
2) Una vez creado el servidor, los clientes deberían poder conectarse a la partida o bien a una partida dentro de la lista.
3) Una vez conectados los clientes con el servidor, solo es cuestión de que los clientes envien los datos.
4) Ahora, es trabajo del servidor enviar los datos a los jugadores. Ya sean lo que se unieron al principio de la partida o bien los que se están uniendo en medio.


Luego para los clientes, suponiendo que cliente1 ataca a una hormiga del cliente2:
Cliente1 debería mandar la informacion de ataque cuando en su juego, la hormiga_cliente1 este atacando a hormiga_cliente2.
Luego ocurriría que simplemente el servidor re-envia el paquete a los demas jugadores para que se vean lo mismo que cliente1.

Dicho esto, y quiero dejar claro que decirlo es mucho mas sencillo que hacerlo.

Deberías aplicar unas cuantas optimizaciones para mejorar el rendimiento de la red, además, teniendo en cuenta que pudieran haber 1000 hormigas, por ejemplo.
Como ser:
1) descartar los paquetes que llegaron tarde
2) no enviar las coordenadas si la posicion de la hormiga, no varió demasiado. Yo presupongo que al no ser un juego en el cual tengas que apuntar, la posicion es irrelevante en determinados casos. Sabes pos.x es practicamente lo mismo que x+2. No haría falta enviar las coordenadas todo el tiempo sino cuando se producta un movimiento notable.
173
Mmmm y si en vez de darle prioridad reinicias el tiro?


ev_colision_up_boost
if (place_meeting(x,y,down_boost)){
          tiro=0;
}
174
Mmm dejame ver si me acuerdo algo:

ev_colision_con_upBoost
[gml]
if (place_meeting(x,y,down_boost)){
          y++;
}
[/gml]
Si no me equivoco, si está tocando el up_boost y a la vez el down_boost, le damos prioridad al de down_boost y lo movemos hacia abajo.
175
Se me ocurre que puede estara pasando porque la pelota toca ambos objetos a la vez. En ese caso en el mismo momento que suma,resta. Entonces no se mueve.
La unica solución me parece que es darle prioridad a alguno de los dos. ???
176
Hola colega, pasate por mis tutoriales, ah no, asi no era XD

ya en serio, si vas a hacer un juego en tiempo real , te conviene de sobrada una conexion UPD, la TCP retrasa todo porque es un protocolo que verifica que se haya enviado el paquete completo sin romperse.
En cambio el udp envia datos todo el tiempo sin importar cual iba primero segundo, o si se perdió por ahí. Lo cual no importa mucho realmente ya que, una instancia al moverse tanto por el mapa es imperceptible o a lo sumo se genera eso que la gente llama "lag" que le dispara al enemigo pero este desaparece un segundo y re-aparece mas adelante.

No te recomiendo para nada usar mis tutoriales de TCP, jugar algo en tiempo real con eso va a ir super lento.


EDit: bueno, veo que publicaste como 5 segundos antes xD
Lo que deberías hacer es si, establecer un servidor que pueda alojar partidas. Un servidor que reenvie los datos del juego, porque muchas veces uno mismo como jugador no puede (o lo mas usual, que no sabe) abrir puertos, configurar el firewall. Es mas, los juegos triple A, usan varios puertos a la vez, no uno solo. Entonces deberías configurar el servidor para tener los puertos abiertos.
Sino sería hacer un Hole Punching para conectar sin mucho trabajo:
https://en.wikipedia.org/wiki/Hole_punching_(networking)


Con respecto a qué enviar al servidor.
Lo ideal sería mandar una señal cuando se ejecute cierta condicion. Por ejemplo, una vez que se haya atacado al hormiguero, el hormiguero del cliente debería enviar esa señal al servidor y entonces el servidor debería repartir la misma señal a los otros hormigueros.
Basicamente:
1-Cliente1 ataca hormiguero.
2-El hormiguero de cliente1 envia al servidor la señal.
3-El servidor retransmite a todos los demas clientes.
4-Los otros clientes reciben la señal.
5-Los hormigueros en los otros clientes, comienzan a generar hormigas.


Citardeberia hacer que si el cliente pulsa el botón de atacar, esta señal se envie al servidor? Así no tendria que sincronizar la posicion de todas las hormigas, junto a su comportamiento y tal, que pueden ser cientas en el mapa.
En un principio debería funcionar, pero el problema es que si se pierde el paquete, por ejemplo desde el cliente al servidor. Solo el cliente que crea las hormigas va a verlas salir. Mientras que los demás nunca recibirían la señal que se perdio en el trayecto.
Lo mismo podría pasar si desde el servidor se pierde el paquete hacia algún cliente.
A mi, me parece que deberías reducir las coordenadas a un dato pequeño, quiza un shortInt, ya que la resolucion no pasaria de los 2000px entonces ocuparía menos bytes, no se cuanto ocupa eso, en C al menos sé que son 2 bytes, mas otros 2 para la coordenada y, serían 4 en total por cada instancia. Poniendole que sacas 500 hormigas, algo un poco inusual, 2000bytes que son a lo sumo 2kb? Solo enviando hormigas. Yo CREO que no debería representar un problema. CREO

De todas maneras sería cuestion de probar eso sino alguna optimizacion, por ejemplo enviar la mitad de las posiciones en un step, la mita en otro, si total, es practicamente irrelevante tener la posicion exacta de cada hormiga. No así su estado de vida/muerto.


Otra cosa que recomendaba siempre el makero Texic, al hacer este tipo de juegos, era, enviar la señal para que se creen las instancias en los demas clientes, y que cada uno haga el calculo por si mismo. Lo cual puede ser el camino mas largo, pero iría bastante fluido el trafico de red.
177
General / Re:Hablemos de lenguajes
Noviembre 24, 2018, 04:33:15 PM
Yo probé muchisimos lenguajes de programacion fuera y dentro de la universidad, nombrarlos para qué, a final de cuentas siempre sale más económico trabajar con un motor de videojuegos, te ahorra tiempo y esfuerzo.
   Aunque siempre está el conocido problema de "optimizacion". Si vas a hacer muchisimos calculos C/C++, si no te importa el rendimiento pero sí la portabilidad, podes tirar con Java, y Python. De ahí tenes otros lenguajes pero no son muy amenos para hacer específicamente videojuegos, más que nada por las librerías solo de graficos, luego las multimedias es otra historia.

Cita de: kostra en Noviembre 24, 2018, 12:49:12 PM
Sobre lo de funcionar por eventos, me gustaría saber si a partir de otro lenguaje, se puede montar un royo para imitar tales eventos, en especial create y step..
En C++ se puede imitar el evento create con los constructores y el evento step, simplemente es un ciclo infinito dentro del algoritmo.

178
Pues, no realmente.

Supon estas 2 proposiciones: "hace frio" y "esta nevando". Un uso normal con OR sería:

if (hace_frio) or (esta_nevando){
     personaje.temblar()
}

Entonces el personaje temblaría independientemente de si hace frio o bien si está nevando, si ocurren las dos al mismo tiempo no hay problema.

Pero el XOR solo permite la veracidad de una sola proposicion a la vez.
Es como si le dijeras a un niño. "Qué quieres de regalo, una pelota o una patineta" la eleccion es exclusiva, elige una de las dos, porque ambas no se puede. Sale muy costoso.
179
El xor se usa en muchos lenguajes y significa eXclusive OR o "O exclusivo" básicamente concatena dos expresiones lógicas y solo toma en cuenta cuando una y solo una de las dos se cumple.
En cambio en el OR normal se puede cumplir una o las dos.


Es como si se dijera en un XOR, o vas a la playa o bien vas a la montaña, no se pueden cumplir en ningun caso las 2 a la misma vez,
En cambio en el OR puede ocurrir las dos al mismo tiempo. Por ejemplo, voy con un amigo o voy solo al cine. Si va una bien, pero pueden ir las dos perfectamente.





180
Preguntas y respuestas / Re:Calcular x
Diciembre 30, 2017, 09:13:49 PM
Deberías mirar haciendo un sistema de ecuaciones con única solución. dónde está indicaría el punto de colisión entre las 2 rectas