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

76
Cita de: jmbs19 en Noviembre 24, 2015, 05:36:40 PM
porque el gml no es inteligente, en el sentido de que el comprueba todas las variables aunque la primera sea falsa, entonces esto genera un peor rendimiento a la hora de ejecutarlo.

Cita de: jmbs19 en Noviembre 24, 2015, 06:17:48 PM
suponiendo que ataque sea false igualmente paso a paso estara comprobando el collision_check y las distances, lo que son unos calculos pesados.

GMS Realiza comprobaciones inteligentes (short-circuit evaluation) desde la versión 1.3. Si la primera condición es falsa, ya no evalúa las demás.
https://www.yoyogames.com/tech_blog/52

Casilla "short-circuit evaluations", pestaña General. en Global game settings

77
Juegos en desarrollo / Re:Crosses Block - Android
Noviembre 24, 2015, 09:46:14 AM
Cita de: Tigerito019 en Noviembre 07, 2015, 04:10:23 PM
El juego pesa 18Mb, Sé que es mucho para un juego tan simple, pero aún no encuentro la forma de disminuir su peso.
Si es que ya cuidaste no estar usando recursos que ocupen mucho espacio(texturas o gráficos muy grandes, archivos de sonido grandes), prueba a desmarcar las casillas x86 y Mips en la pestaña "General" de Android (Global Game Settings)

También puedes usar algún programa para optimizar gráficos PNG (la diferencia se nota más en gráficos de tamaño mediano o grande, no tanto en chicos)
78
Cita de: jmbs19 en Noviembre 23, 2015, 12:00:02 AM
me gusta mucho el orden que tienes, pero no me gusta como haces para saber cual es la correcta ya que usa la longitud de una cadena.
Cuestion de gustos. Ambos métodos servirían, pero justamente, prefiero preguntar por la longitud de la cadena (o un método similar) que tener que definir dos claves más por cada pregunta en el ini. Yo me decanto por este método porque una sola clave en el ini me indica cuál es la respuesta correcta, sin necesidad de claves adicionales que indiquen las respuestas incorrectas y porque me gusta que la respuesta correcta en si misma tenga una característica de la que las otras respuestas carecen, y sólo debo buscar dicha característica.

Un método parecido sería que la clave correcta guardara una palabra clave, dicha palabra clave solamente estaría contenida en la respuesta correcta, por ejemplo, "Unity". Si la palabra clave está contenida en la cadena, la respuesta es correcta.

En cualquiera de las variaciones que propongo, se puede crear un script tipo validar_respuesta() que valide la respuesta de manera más pulcra, por ejemplo
[gml]
validar_respuesta(pregunta)
[/gml]
Y que se encarge tanto de evaluar la respuesta, como de generar los objetos obj_ganar u obj_perder, según sea el caso.

Lo bueno de todo es que siempre hay más de una manera de implementar las cosas.
79
Un método que se me ocurre es que en el ini, por cada pregunta, tengas la siguiente estructura (los comentarios no van en el ini, sólo sirven para propósitos de explicación):

[PREGUNTA10]
pregunta = "Cual es el mejor software para desarrollar juegos"   //Cadena
r1 = "Game Maker Studio"   //Cadena
r2 = "Game Salad"     //Cadena
r3 = "Unity"     //Cadena
correcta = ??    //Entero


El valor para la clave entero sería la longitud de la cadena de la respuesta correcta. Es decir, que si por ejemplo, la respuesta correcta fuera "Unity", el valor de correcta sería un 5, que es la longitud de la cadena "Unity". De esto se deduce que debes asegurarte que ninguna de las tres respuestas tenga una longitud igual. Luego, en GM, para saber cuál es la respuesta correcta, sólo tienes que comparar la longitud de la respuesta elegida con el valor de la clave correcta del ini mediante la función string_legnth()
80
Preguntas y respuestas / Re:Puntero personalizado c:
Noviembre 22, 2015, 08:00:48 AM
En algún objeto, de preferencia controlador (persistente), evento CREATE
[gml]
cursor_sprite = spr_mi_spritePunteror
window_set_cursor(cr_none);                 //Deshabilitar el cursor estándar de windows
[/gml]
Si el sprite personalizado tiene una animación, el método anterior presenta el inconveniente de que no se puede controlar la velocidad de animación, la cual correrá SIEMPRE a la misma velocidad que la de la habitación.

Una alternativa es usar un objeto con una profundidad menor a la de los demás objetos, que se colocaría en la misma posición del puntero y que tenga asignado un sprite del puntero. Para que dicho objeto siga al puntero:
[gml]
x = mouse_x
y = mouse_y[/gml]
81
Cita de: Guacusio en Noviembre 21, 2015, 09:08:28 AM
Te recomiendo que antes de intentar usar las funciones http de GMS estudies el lenguaje php ya que no es buena idea tratar de copiar y pegar código sin tener la menor idea de lo que estás haciendo.
Eso, Guacusio. El consejo más sabio que he leído en meses. No hechar en saco roto, compañeros, por favor.
82
Cita de: Guacusio en Noviembre 21, 2015, 10:06:12 AM
Olvídate de preguntarle al usuario dónde quiere guardar un archivo, ya que por ser GMS sandbox no te va a dejar guardar nada fuera de la save area.
Es cierto que el código está mal implementado (no lo quería mencionar  XD) pero hay dos excepciones a la regla del sandbox:

En windows y en mac es posible saltarse el sandbox, con la restricción de que el usuario debe elegir, mediante el cuadro de diálogo correspondiente, la nueva ubicación de guardado (o de lectura). Esto lo explica el manual:
CitarOn the Windows platform there is one way to save and load files from outside of the sandbox and that is using the functions get_open_filename and get_save_filename. Both of these functions will require that the user select an area for loading and saving and the return string can then be used in the rest of the file functions to bypass the sandbox.

83
Estuve probando a dibujar objetos y sprites con distintas profundidades, empalmados parcialmente. AL restablecer la pantalla completa, nunca percibí ese error como el que se ve en la imagen que posteaste, es decir, siempre los sprites se dibujaban bien, sin "basura" alrededor. Probé tanto con "interpolate" encendida y apagada, y siempre se dibujaron bien.

Ahora, es cierto que las funciones de mensajes terminan el modo pantalla completa y regresan el juego a su tamaño normal. Las funciones asíncronas de diálogo también lo hacen, segun pude probar..
Cita de: DarkKRuleR en Noviembre 20, 2015, 06:45:31 PM
El juego tiene entorno 3D, e inicia en pantalla completa. Pero no sé CUÁNDO esto puede ser falso.
Si te refieres a saber si se está en modo a pantalla completa o no, sí, es posible saberlo, para eso se usa la función window_get_fullscreen()

Es posible hacer que el juego regrese a pantalla completa si por alguna razón éste modo se pierde, pero en el caso de los diálogos de mensajes , si se usa esta estrategia, el cuadro de diálogo se pierde para dar paso a la ventana de juego en pantalla completa. Es como un círculo vicioso (para traer el mensaje de nuevo al frente, se debe desactivar el modo a pantalla completa). En el caso de cuadros de diálogo, esto es un comportamiento poco adecuado, pero en el caso de otras intervenciones, como el antivirus, creo que sí funcionaría para regresar al juego a pantalla completa, aunque ignoro a qué se deba el error de la imagen.

No creo que funcione, pero puedes probar a usar la función
display_reset() para ver si se corrige el fallo de los sprites con basura, aunque le veo pocas probabilidades.

Pregunta por curiosidad: cuando ocurre el fallo y el personaje se ve mal, ¿la application_surface conserva las mismas dimensiones que antes de que ocurriera el fallo?
84
Una manera es justamente tal como muestra el código que has colocado. En GM, cada habitación puede contener hasta 8 fondos (del 0 al 7). Esos fondos los puedes definir desde la pestaña "backgrounds" en el editor de room, o mediante el arreglo background_index[] (siempre en el contexto de la habitación actual). El código
[gml]background_hspeed[0] = 2[/gml]
Moverá el fondo 0 hacia la derecha. Esto quiere decir que debe haber asignado un fondo background_index[0] para la habitación, de manera que dicho fondo se pueda mover. Preferentemente, el fondo que se mueve debe estar configurado para repetirse horizontalmente, de lo contrario, llegará un punto en que de tanto moverse, dejará de verse en pantalla. Creo que por defecto, las opciones "Tile Hor" y "Tile Vert" están activas.
85
Cita de: NiuWeb en Noviembre 21, 2015, 03:14:58 AM
¿Qué puedo hacer?, no veo donde está el error, y he usado este código sin problemas en muchas ocaciones.
Qué valor tiene la variable working directory? Intenta usarla para guardar el archivo.
86
¿Y si realmente fuera un programa mediocre, qué harías? (No estoy diciendo que lo sea, ni que no lo sea  XD)

Si GM es tan bueno, ¿por qué no lo usan compañías como Ubisoft, Bioware, Bethesda, Bizarre, Crytek, Capcom y un largo etcétera, etcétera? ¿Ellos son los tontos y nosotros los inteligentes?

Realmente mi intención no es entrar a la discusión, porque esto se puede llenar de kilos de texto, y a la larga, el que quiera seguir usando GM lo seguirá usando, y el que quiera probar otras alternativas, lo hará, seguramente. Lo único que realmente venía a plantear es que yo me hago preguntas así pero en el sentido inverso:

¿Qué pasa si eres un desarrollador mediocre o malo? ¿Importa más la herramienta/entorno de desarrollo o mis habilidades? ¿Y si tengo la mejor herramienta disponible, pero no tengo talento para desarrollar?

"Es más fácil engañar a la gente, que convencerlos de que han sido engañados"
87
Cita de: EnteiCross en Noviembre 19, 2015, 11:01:59 PM
Lo que yo sugiero es que mejor antes de colocar un objeto, verifiques antes si hay un espacio libre, y si asi lo es (esta libre) procedes a colocar una nueva instancia en la posición seleccionada.

if !place_meeting(mouse_x , mouse_y, oWall) {
  //Crear el objeto, EJ:
instance_create(mouse_x, mouse_y, oWall);
}

Es buena idea, pero para que ese código funcione, se debe ejecutar desde un objeto que teng asignado un sprite o máscara de colisión, porque esto es requerido por la función place_meeting. Si se usa, por ejemplo, desde un objeto controlador sin sprite, fallaría.
88
Cita de: NiuWeb en Noviembre 19, 2015, 10:48:46 PM
Y cómo podría identificar el objeto que se encuentra bajo el nuevo?
¿Cuál nuevo? el nuevo no se ha creado aun. Hay varias funciones. Momento de consultar el manual  :D
http://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/index.html


89
¿Por qué antes de crear el nuevo objeto, no revisas si hay debajo otro, y elminas ese otro y después creas el nuevo?
90
Preguntas y respuestas / Re:HACER BOTAR UNA PELOTA.
Noviembre 19, 2015, 08:23:42 PM
Cita de: nonoroman en Noviembre 19, 2015, 01:43:22 PM
He estado mirando en el manual y no explica mucho, la verdad es que no entiendo bien como funciona. ??? ???
Lo que pasa es que no hay mucho que explicar, la función simula un rebote, sin más. sólo es cuestión de llamarla. La puedes llamar en STEP, pero no es necesario, la puedes llamar también en un evento de colisión, y sólo se ejecutaría cuando ocurra dicha colisión.

Cita de: nonoroman en Noviembre 17, 2015, 08:10:21 PM
Y otra es. Como mido el punto donde inicio el rebote
Bueno, se puede medir, ¿pero para qué quieres hacerlo? Si es para controlar el rebote, por ejemplo, la altura máxima que alcanza medida desde el piso, no es necesario. Dejo un ejemplo muy sencillo que más o menos se comporta como un rebote realista, usando lo que te dijo Black_cat.
http://www.mediafire.com/download/cja4hwl580ba38n/rebote_simple1.gmz