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

106
Si en el objeto A, al hacer click, se ejecuta
[gml]
id_B = instance_nearest(x, y, obj_B)[/gml]
id_B almacenará el identificador de instancia de la instancia más cercana del objeto B. Mediante id_B puedes mover esa instancia en particular, garantizando que las otras instancias de B queden quietas
107
Nunca hay más de una habitación cargada a la vez. No es que, si tu juego tiene 100 habitaciones, las 100 estén cargadas mientras se juega en la primera. Esto no quiere decir que no se deba prestar atención a optimizar cosas como las páginas de textura, por ejemplo.
108
Cita de: NiuWeb en Noviembre 16, 2015, 05:13:32 PM
Estor creando una extensión .GEX, y dentro de ella tengo algunos scripts. Uno de estos scripts va a inicializar una variable global, y quisiera comprobar, mediante otros scripts, si esta variable global ya se ha creado. Y necesito específicamente esto. No algo como, no sé, comprobar si el scrpit se ha ejecutato. Sólo comprobar si esa variable global se HA CREADO.
Entiendo que hay muchos escenarios donde las extintas funciones variable_local_exists y variable_global_exist resuelverían muchos problemas, pero de entrada, lo ideal cuando se diseña una extensión es hacer que esa extensión no sea dependiente ni de objetos ni variables propias del proyecto, sino diseñar la extensión de manera "genérica" para que pueda actuar "universalmente" sin que se imponga que deban existir ciertas variables. No estoy diciendo que no se pueda tener una extensión que trabaje sobre variables del proyecto, pero no es lo recomendado, y es algo que los diseñadores de extensiones tratan de evitar.
109
Citarif distance_to_object(obj_player1) > 150
{alarm[5]=0}
Si lo que quieres es que al alejarse del jugador, ya no se lance un golpe, entonces deberías igualar a -1 la alarma5 en lugar de hacerla 0. Un -1 indica que la alarma se ha parado y ya no corre más. El 0 no significa que la alarma este detenida.

Citarif sprite_index == jab
{if image_index >= image_number -1
{
alarm[5]=1
cuxs=0
}}
Este código no debería estar dentro de una alarma, esto debería ir en STEP, porque no se sabe en qué momento exacto el sprite va a llegar a su última subimagen. Generalmente no es útil recurrir a un evento de alarma para determinar si la animación ha terminado. En este caso, en el mismo paso, estás indicando que arranque una animación, y preguntando si se ha llegado al final de esa animación, lo cuál difícilmente va a suceder. En el primer if, después de sprite_index = jab deberías usar image_index = 0 para asegurar que el golpe/ataque siempre comience desde la subimagen 0.

Por último, cuando se comprueba que la animación llega a su última subimagen, ese alarm[5] = 1 va a estropear tu lógica, porque el ataque apenas ha terminado, y tú estas arrancando otra vez la alarma (al siguiente STEP) para volver a atacar, es decir, no hay espera.

Lo que yo haría sería usar algo parecido a:
[gml]
cus=1
if distance_to_object(obj_player1)<=150 and cus=1 and obj_player2.onground = true and (atacar)
{
     image_speed = 0.5
     sprite_index = jab
     image_index = 0
     atacar = false                        // Bandera para controlar si se puede atacar
     alarm[0] = room_speed * 4      //Esperar 4 segundos para volver a atacar
}
[/gml]

Y en alarm[0]
[gml]atacar = true[/gml]
110
Preguntas y respuestas / Re:Como crear mapas infinitos ?
Noviembre 16, 2015, 10:05:18 PM
Una manera es darle una velocidad horizontal al fondo, desde la pestaña "Backgrounds" en el editor de rooms


También puedes consultar el tutorial "Scrolling shooter" que viene incluído con GMS, ahí se muestra cómo mover el fondo para dar la ilusión de que el mapa es infinito.
111
Cita de: yokaiworld en Noviembre 16, 2015, 09:44:27 PM
gracias por responder desde step  llamo una alarma
pero no logro crear una pausa sino que tira golpes como loco y no logro hacer que se detenga algien puede poner un ejemplo
Indica qué código usas
112
Cita de: pasqualefz en Noviembre 13, 2015, 08:50:04 PM
Buenas soy nuevo en esto  :'( quisiera saber como es posible crear un disparo tipo angry birds o gunbound que se base en el angulo y en la potencia que le demos con fisica del mundo real?
Si recién vas comenzando con GML, te recomendaría que primero aprendieras las nociones básicas de GML, ya que es preciso que entiendas cómo trabajan las funciones normales para después comprender mejor las diferencias y el modo en que trabaja el motor de física y sus funciones. Si de todas maneras te sientes curioso o con confianza, GMS incluye una demo de cómo se puede construír un juego similar a angry birds usando el motor de física.
113
No sé si es la misma extensión que esta:
http://gmc.yoyogames.com/index.php?showtopic=521378

Esta extensión hace uso de un servidor administrado por el creador de la extensión, por lo que (creo, nunca la he usado) no se puede usar con un servidor propio. Esto será muy conveniente para unos usuarios (la mayoría, tal vez) e inconveniente para otros. Personalmente, pienso que es 10 veces más recomendable que usar un servicio dedicado a hosting de páginas web para montar un servidor de juegos, pero para usuarios que quieren tener su propio servidor alojado en su propio servicio de hosting, entonces quizás no valga.

Buscando en la red creo que no te sería dificil encontrar fácilmente extensiones para GM que permiten conectar a bases de datos, pero hasta donde tengo entendido, no es conveniente conectar directamente ningún juego a una base de datos pues la contraseña es bastante vulnerable a ser leída. Lo recomendable es usar un servicio intermediario, por ejemplo PHP.

Si sabes usar, por ejemplo, PHP y MySQL, entonces es posible conectar a una base de datos desde GM:S, pero se debe poner atención con la seguridad, como usar un método de encriptación adecuado, algun algoritmo de hash, etc.
114
Si quieres que la ventana de registro se vea con un estilo gráfico igual al de tu juego, entonces tienes que crear por ti mismo todo, tanto el sistema para leer la entrada desde teclado, como para desplegar los caracteres en pantalla, como para crear el aspecto gráfico de ventanas y botones, etc.

La opción más directa, pero que no permite personalizar la apariencia de la ventana es usar la función
get_login_async()

El manual incluye un ejemplo de su uso:
http://docs.yoyogames.com/source/dadiospice/002_reference/asynchronous%20functions/get_login_async.html
115
No es que sea pecado usar surfaces. El gasto de CPU por usar surfaces para rotar unos pocos sprites difícilmente podrás notarlo si mides el consumo.


A la izquierda, el sprite original
En el centro, el sprite original, pero escalado primero y rotado después.
A la derecha, el sprite original, pero rotado primero(en una surface) y escalado después.
116
Preguntas y respuestas / Re:Archivos INI y Android
Noviembre 12, 2015, 09:00:41 AM
Cita de: vitito93 en Noviembre 12, 2015, 08:01:18 AM
Penumbra aprovecho y pregunto.. es bastante facil editar un archivo ini en android? digamos si tiene alguna ruta al archivo de texto o esta encriptado?
Ningún ini estará encriptado a menos que se use código para encriptarlo, por lo que en general, un ini "normal" es fácil de editar.

En android, para poder acceder al ini, el dispositivo debe estar rooteado. La ubicación donde se almacena sería /data/data/com.nombre_del_paquete/files
117
Preguntas y respuestas / Re:Archivos INI y Android
Noviembre 11, 2015, 11:27:11 PM
Depende de para qué lo quieras usar. Creo que es el método de guardado más extendido en GM:S.
118
Preguntas y respuestas / Re:Subir archivo hosting
Noviembre 09, 2015, 10:15:43 AM
Una manera, sin recurrir a dlls ni GMechanism, sería crear un script PHP que correría en el servidor a la espera de la llegada del archivo,  por ejemplo usando fopen en modo escritura. El script debería devolver un valor para saber si se ha recibido correctamente el archivo, y se debería emplear el evento asíncrono HTTP (En GM:S) para comprobar si el archivo se recibió correctamente, revisando si llegó ese valor.

El archivo ini puede enviarse mediante la función http_post_string(), pero si se manda así tal cual, probablemente todo el proceso falle, porque la URL no sería válida, entonces se necesita usar codificación de URL para que el envío sea correcto
http://help.yoyogames.com/entries/26963528-Encoding-URLs


NOTA: Existiría la posibilidad (quizás remota, quizás no tanto) de que alguien más podría aprovechar el script para subir archivos al servidor.
119
Ah bueno. Insisto, se puede hacer usando un solo evento de colisión.

Encuentro más conveniente aprovechar una bondad del evento de colisión. En el objeto A, evento de colision con B, puedes usar:
[gml]
if (other.x > x)
     //Esta instancia de B está a la derecha de A
[/gml]
La palabra other sólo se puede usar en un contexto de colisión (o en una sentencia with). En el caso de las colisiones, other es la otra instancia con la que se colisiona (dependiendo del objeto que llame al evento colision). No es necesario pasar el id usando un evento de colisión en cada objeto, ya que como estarás imaginando, se puede hacer lo siguiente
[Colisión con obj_B desde obj_A]
[gml]
i_d = other.id    //Obtener el id, de la instancia de B contra la que se colisiona.
[/gml]
y usar i_d como quieras, en el mismo evento de colisión o fuera, en step, por ejemplo.


120
No se me ocurre por qué lo visualizas así. Es cierto que tanto en el objeto A como en el B se puede colocar un evento de colisión contra el otro objeto, pero nunca me he visto en una situación donde este chequeo "doble" sea necesario, ya que, como entiendo (no sé si me equivoque), la colisión A vs B y B vs A es la misma, por lo que sólo es necesario recurrir a un evento de colisión, en cualquiera de los dos objetos.

¿Qué es exactamente lo que quieres hacer?

Supongo que el orden de ejecución del evento colisión dependará de cuál de las instancias se creó primero. Esto se puede saber utilizando el depurador.