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

1096
object_index  es una variable de sólo lectura, por lo que no es posible darle un valor nuevo.

Creo que lo que quieres se logra usando la función
[gml]instance_change( choose(obj_X, obj_Y, obj_Z), 1)[/gml]
http://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20functions/instance_c
1097
Para usar los códigos de arriba, tendrías que borrar todo lo que está en STEP (1, 2, 3 y 4) y en su lugar poner el ícono

Luego de colocar ese ícono, le das doble click y escribes
[gml]
if (instance_number(obj_x) == 5) and (alarm[0] < 0)
{
     alarm[0] = 2 * room_speed
}
[/gml]

Del lado izquierdo, donde tienes Step, Room Start, No more lives, Draw, agregas un evento de alarma (cero)

y ahí escribes:
[gml]room_goto(room_04_win)
[/gml]

obj_x es el objeto del que juntas 5, que no sé cómo se llame, tienes que escribir ahí el nombre de tu objeto.
1098
Cita de: Mataca en Octubre 20, 2014, 11:21:52 PM
Yo tengo que al haber 5 cantidad de objetos en el room se cambie a otro room.
¿Y cómo haces eso? ¿Qué codigo usas? ¿En qué evento?¿Usas Drag and Drop?

Es casi lo mismo, pero en lugar de decirle que cuando haya 5 objetos se cambie de habitación, le dices que cuando haya 5 objetos eche a andar una alarma en 2 segundos y dentro del evento de alarma haces el cambio de room. Me imagino que estás usando D&D, pero no puedo dar más detalles porque no uso D&D.
1099
Crear un objeto aleatoriamente sería algo como
[gml]
randomize()
instance_create(100, 100, choose(obj_X, obj_Y, obj_Z) )
[/gml]

Si quieres que el objeto Z tenga más probabilidad de ser creado que los otros
[gml]
randomize()
instance_create(100, 100, choose(obj_X, obj_Y, obj_Z, obj_Z, obj_Z) )
[/gml]

Lo de la tienda también es posible, pero tienes que entender muy bien cómo trabajan las funciones de networking en GMS para crear una tienda servidor a la cual se puedan conectar varios clientes. Lee el artículo sobre juego online que hizo Black_cat en la sección de artículos
http://www.comunidadgm.org/articulos/(programacion)-hacer-un-juego-multijugador-online-con-game-maker-studio/
1100
La función sleep ya no existe en Studio. Puedes probar haciendo que al juntar todos los objetos, se lance una alarma:
[gml]alarm[0] = 2 * room_speed[/gml]

y dentro del evento de esa alarma hagas el cambio de habitación
[gml]room_goto(room_final)[/gml]
1101
Definitivamente el problema es tu GMS. Acabo de usar el mismo código:

Citarancho_de_la_room = 800;
largo_de_la_room = 800;

global.nombre_de_la_room = room_add();
room_set_width(global.nombre_de_la_room, ancho_de_la_room);
room_set_height(global.nombre_de_la_room, largo_de_la_room);
room_goto(global.nombre_de_la_room);

Y no da ningún error. Cambia de habitación sin problemas
1102
¿Qué versión de GMS estás usando? En todo caso sube tu proyecto para probarlo
1103
Creo que la manera más óptima de hacer lo que quieres es usar las funciones de cadena de GML para ir leyendo los caracteres que componen toda la línea, usando a la vez ciclos para hacerlo recursivo.

Por ejemplo

[gml]
posicion = 0
palabra = ""
while(posicion < string_length(mi_cadena) )
{
     while (string_char_at(mi_cadena, posicion) != " ")
     {
          palabra += string_char_at(mi_cadena, posicion)
          posicion += 1
     }
     posicion += 1
     palabra = ""
}[/gml]
Esto haría que, mientras no se encuentre un espacio en blanco en la cadena, los caracteres (comenzando por el primero), se van guardando en la variable palabra. Usando tu ejemplo, se guardaría el 1, luego encontraría un espacio, por lo que se terminaría el ciclo anidado, luego se sumaría uno para saltar el espacio despées del 1 y el flujo volvería a entrar al ciclo anidado, entonces en las siguientes tres iteraciones leería 768, y volvería a salir del ciclo anidado al encontrarse con otro espacio, etc, etc.

El ejemplo es sólo para darte una idea, necesitaría elaborarse más para que detecte saltos de línea o para que guarde las palabras de una línea en un arreglo o ds_list, ds_map, etc. Obviamente que se pueden usar ciclos for o repeat en lugar del while
1104
Preguntas y respuestas / Re:Como Tapar?????
Octubre 17, 2014, 09:45:36 PM
Cita de: ocarina en Octubre 17, 2014, 07:18:19 PM
Y wadk y penumbra
En Vb y C++ si se puede hacer juegos yo he echo juegos en ambos lenguajes!
Vb es muy amplio y se puede hacer tanto con formularios y también juegos!  Lo se porque yo he hecho juegos en vb
Y en C++ también he echo juegos y visuales osea con sprites! Aunque no lo creais!

Bueno, pero nadie en el hilo a dicho que GML sea el único lenguaje que sirve para hacer juegos, ni que C++ o VB no sirvan para hacer juegos. Lo único que mencioné es que no sé por qué GML tendría que comportarse como C++/VB cuando GML ni siquiera es un lenguaje orientado a objetos, y aun entre lenguajes orientados a objetos, hay muchas diferencias.
1105
Preguntas y respuestas / Re:Como Tapar?????
Octubre 17, 2014, 11:28:59 AM
Bueno, ahora me permito discrepar con tu opinión.

No creo que el ejemplo que das del botón con tapa de plástico sea válido, porque de la misma manera yo puedo sugerir un comportamiento a la inversa, pero eso no quiere decir que es así como deba funcionar el lenguaje en todos los casos. Por ejemplo, si se quisiera simular una de esas varas con las que se pincha la basura (para recogerla del suelo), pues entonces diría que no es lógico que la vara sólo pueda pinchar la envoltura más arriba, sino que la vara puede pinchar y coger más de una envoltura de un solo pinchazo, y si el lenguaje no se comportara así diría que no es congruente, lo cual no es cierto.

De lo que se trata es que en GM, si le colocas un código (válido) a un evento, no hay ninguna razón para pensar que ese código no deba ejecutarse o para pensar que GM deba adivinar cuándo quiero que se ejecute y cuando no (sin usar condiciones). ¿Por qué? Porque la documentación no indica que la ejecución de los eventos de ratón dependa de la profundidad de un objeto. Y por eso mencioné que el comportamiento es congruente. Si la documentación mencionara una cosa y GML se comportara de manera distinta, entonces sí me atrevería a decir que es incongruente.

Y bueno, creo que una comparación o relación con VB o C++ no tiene caso ya que de entrada, GML no es un lenguaje orientado a objetos: http://gmc.yoyogames.com/index.php?showtopic=591920. Así que muchas soluciones serán distintas (y probablemente) menos óptimas que en aquellos lenguajes o simplemente hay cosas que no es posible hacer.

Pero es difícil no estar de acuerdo con la conclusión que haces al final: si así es en GM, así habrá que aprenderlo.

Creo que no entiendo exactamente tu concepto de tapar, pero si quieres que un objeto no sólo quede por encima del juego, sino que se dibuje más allá de los límites de la ventana del juego (como un pop-up no centrado), entonces no conozco ningún método para hacerlo. No he visto la solución de Ocarina, pero si no hay problema en que el mensaje no salga de los límites de la habitación, sí hay manera de hacer que "una capa" obstruya la visión de lo que hay debajo sin necesidad de usar una habitación extra (supongo, porque repito que probablemente no entiendo al 100% cómo funciona eso que llamas tapar).

1106
General / Re:que engine recomendais
Octubre 16, 2014, 10:48:56 PM
rage3d no sé que sea, creo que era un chipset gráfico. Blender es una suite de modelado 3D, muy completa pero cuya interfaz y menús a mi me dan dolor de cabeza. Los tutoriales de Unity que estoy consultando más seguido son los oficiales, que están en la misma página de Unity (sección learn/conocer), aunque en Youtube también hay mucho material no oficial muy bueno.

Si no te has metido antes en 3D, te vas a encontrar con un mundo nuevo (puede que algo intimidante). También necesitas cogerle la idea a C# (a menos que ya lo manejes), que se usa para escribir los scripts de Unity.
1107
General / Re:que engine recomendais
Octubre 16, 2014, 09:51:46 PM
Yo me tiraría de cabeza por Unity, de hecho, eso llevo haciendo hace un par de meses. Los tutoriales en video de Unity son de lo mejor que he visto, muy bien explicados, y tocan muchos temas, tanto para principiantes como para cosas más avanzados.

Eso sí, en mi opinión la curva de aprendizaje no tiene nada que ver con GM, sino que es más lenta y las cosas se hacen de manera muy distinta a GM, pero creo que para ese tipo de juegos que quieres hacer, no hay un IDE mejor.
1108
Preguntas y respuestas / Re:Como Tapar?????
Octubre 16, 2014, 09:38:17 PM
El porqué es bastante sencillo: Porque los eventos de GMS son democráticos y no discriminan objetos. Si consultas la documentación de los eventos del mouse
http://docs.yoyogames.com/source/dadiospice/000_using%20gamemaker/events/mouse%20event.html
no hay nada que indique que el evento tiene un orden de ejecución o prioridad basado en la profundidad del objeto.

Asignaste un evento de mouse a los objetos A y B. Cuando se hace click sobre esos objetos, GM detecta que ambos poseen un evento de mouse y ejecuta el código correspondiente de cada objeto. Esto, si se piensa bien, es la manera correcta en que deben funcionar los eventos, y si uno de ellos no se ejecutara (a pesar de que el objeto tuviera un evento totalmente válido) sería un fallo bastante incongruente por parte de GM

GM es obediente y ejecuta el evento de mouse en el momento que debe, sin hacer ni más ni menos que lo que dice el código: "si se me presiona, dibujo un mensaje en pantalla". Si quieres que se muestre un solo mensaje (GM no tiene manera de saber esto originalmente), tienes que ser específico e implementar el código que haga que sólo se muestre el mensaje del objeto con menor profundidad.

1109
[gml]if (global.explosion == true) and  ( distance_to_point(obj_bomba.x, obj_bomba.y) <= 200)
     instance_destroy();[/gml]
El código debe ir en [STEP] de los objetos que pueden ser dañados por la bomba, y obviamente se requiere que la variable explosion sea 1 cuando se muestre el sprite de explosion y cero cuando no.
1110
Preguntas y respuestas / Re:Controles Tactiles
Octubre 16, 2014, 06:27:01 AM
Creo que en las primeras versiones de Studio, había muchas funciones cuyo nombre comenzaban como YoYo_ y por ahí de mediados del 2012 decidieron renombrar funciones, pero aunque en la documentación no se les menciona, las funciones YoYo_ no las desecharon del todo y siguen latentes en GMS, para ofrecer compatibilidad hacia atrás. Yo optaría por usar la función actual que es virtual_key_add()

Otra cosa es que en el código que pusiste, no hay nada que haga que el personaje avance, sólo la declaración de teclas virtuales y el dibujo de sprites (creo que es como un control) en DRAW