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

391
Cita de: totemalf en Agosto 17, 2012, 06:56:37 PM
Mmm, Huston, tenemos un problema.  :-\
Este método es perfecto cuando solo tenemos una instancia del payaso, pero al colocar dos surge un problema.
Cuando el ratón pasa por encima de uno de los payasos se iluminan ambos... ¿Qué podríamos hacer para corregir esto?
Ah sí, cambia donde aparece "obj_payaso" por "id"
Va a funcionar bien porque cada instancia tiene un número único que se guarda en la variable "id", entonces cuando escribis "id" estas escribiendo el numero de esa instancia

Cita de: totemalf en Agosto 17, 2012, 06:56:37 PM
Por otro lado, he tenido alguna idea para tratar de hacer esto sin código de por medio, o con menos código...
se podría crear un objeto sin sprite llamado mouse y asignarle la ubicación del ratón en todo momento?
de este modo bastaría con agregar un evento colisión en cada objeto que queramos colisionar con el mouse, quitando la necesidad de añadir el código en cada objeto. No se si se puede hacer.... es solo una idea.

Un saludo y gracias!
Sí, es la respuesta que te dio romon_28
El problema es que podria ser mas lento (porque creamos un objeto mas) y el mouse se va a ver lento.
Lo que pasa es que el juego se actualiza 30 veces por segundo, pero windows creo que 60 veces por segundo, entonces se va a notar que el mouse "se tilda" o "va lento" porque va a estar moviendose 30 veces por segundo

Tambien podes hacer que el juego funcione a 60 veces por segundo. Entra a todas las rooms y en la pestaña "Settings" cambia la room_speed que esta en 30, ponelo en 60
El problema es que va a estar todo el doble de rapido (podes modificar los valores pero es mucho trabajo si vas avanzado) y el otro problema es que consume mas recursos (la PC trabaja el doble)
392
Se supone que el foreground tapa todo
Podes hacer otro foreground negro, pero a que te referis con "pero ya uso todos los backgrounds"?

Otra es hacer esos backgrounds sprites y dibujarlos en el layer -1000, para dibujarel rectangulo en el layer -1001 por ejemplo
393
Cita de: totemalf en Agosto 15, 2012, 07:16:24 PM
Imagino que esto es un pequeño error en la función Mouse Leave de GM, no?
No se, eso parece, porque la acción se llama "Entrada de mouse" y "Salida de mouse" y no funciona bien
Nunca habia probado, a lo mejor alguien sabe

Cita de: totemalf en Agosto 15, 2012, 07:16:24 PM
Mgbu, serías tan amable de explicarme un poco el funcionamiento de esa linea de código?, funciona perfecto, pero me gustaría entenderlo, de momento he visto poco de Game Maker, y casi todo ha sido de la interfaz, eventos, acciones y demás, pero de código casi nada.
Si, es importante que sepas :D
El if es una condicion, se traduce al español con un "si"

collision_point(mouse_x,mouse_y,obj_payaso,1,0) es una funcion, si ya sabes otro lenguaje de programacion es facil entenderlo. Es como preguntarle a alguien, esa funcion se fija si un objetocolisiona con un punto, en este caso a la funcion hay que decirle cual es el punto y el objeto. Entonces se fija si obj_payaso colisiona con un punto ubicado donde está el mouse, por eso escribo mouse_x, mouse_y (X y Y del mouse), despues ese 1 y ese 0 no es tan importante, el 1 le dice que tiene que ser preciso y el 0 que incluya al objeto en donde esta escrito
Si la funcion es verdadera (obj_payaso colisiona con el mouse) el juego hace lo que tiene al lado (sprite_index=spr_payasoenter) porque al principio pusimos if

Despues el sprite_index=spr_payasoenter hace que el sprite sea spr_payasoenter. Es facil de entenderlo

El else se traduce a "o si no" o "de lo contrario"

Al final esta de nuevo sprite_index=spr_payaso, pero fijate que ahora el sprite es spr_payaso

Todo eso se traduce en:
Si el payaso colisiona con el mouse poner de sprite spr_payasoenter
De lo contrario poner de sprite spr_payaso


En realidad el codigo es lo mismo que arrastrar cuadrados, todo lo que se puede hacer arrastrando cuadrados se puede hacer escribiendo, si no entendiste algo pregunta, al principio creia que nunca iba a aprender a escribir, pero despues vas aprendiendo porque es lo mismo que arrastrar cuadrados

Cita de: totemalf en Agosto 15, 2012, 07:16:24 PM
Mmm, es posible crear eventos nuevos en Game Maker? o sea, crear un botón en eventos con ese código y llamarlo Mouseover, por ejemplo ¿?
Si, pero demasiado dificil para lo que logras, porque vas a tener que escribir el codigo para hacer el evento. Entonces es lo mismo, pero creo que es asi:

Vas a Resources y luego a Define triggers... en el menu de arriba
Ahi agregas un evento con Add, adentro le pones el nombre (Name), por ejemplo Mouse Adentro
En Condition iría esto:
return collision_point(mouse_x,mouse_y,obj_payaso,1,0)
Es la funcion con la palabra return adelante, cosas del GM
Despues agregas otro con el nombre Mouse Fuera por ejemplo y en condition va
return not collision_point(mouse_x,mouse_y,obj_payaso,1,0)
Podes ver que es lo mismo pero con el not, eso hace que se fije si NO colisiona con el punto

Despues cuando agregas el evento va a estar en la parte Trigger
394
Me equivoque, era al reves XD
if collision_point(mouse_x,mouse_y,obj_payaso,1,0)  sprite_index=spr_payasoenter
else sprite_index=spr_payaso
395

Nunca me doy cuenta :'(


Ahora al problema, probé hacer lo que hiciste y es verdad, mientras se mueve no chequea nada
Por eso viendo el manial encontré una solución:

En Step agrega "Execute a piece of code", te va a abrir un lugar para escribir y pegás
if collision_point(mouse_x,mouse_y,obj_payaso,1,0)  sprite_index=spr_payaso
else sprite_index=spr_payasoenter


Acordate de cambiar obj_payaso por el nombre de objeto que uses
396
Pero estas haciendo un objeto para eso, seria mas eficiente hacer un chequeo con mouse_x y mouse_y, quedaria un rectangulo y no haria caso a la mascara pero lo prefiero asi.
Eso es un error de GM? nunca me paso
397
Me parece que hay algo en mouse leave que hace que no funcione
Creo que deberia funcionar, otra es que nos pases el editable (archivo .gmk), podes adjuntar en "Opciones adicionales" cuando contestas el tema
398
Te hice un ejemplo que esta adjunto, si no queres descargarlo aca va lo importante:
En un objeto controlador para no mezclar pones

En Create:
[gml]//SETEO DE VARIABLES

//Bordes: Distancia del objeto al borde de la pantalla
borde_h = 50 //Borde horizontal
borde_v = 50 //Borde vertical

//Proporciones: Proporcion de la view, por ejemplo las pantallas de PC son 3:2,
//              las pantallas anchas 16:9, etc.
//              En este caso usamos 3:2 porque los puertos son 640x480
//              Tambien se pueden obtener dividiendo el ancho por el alto
prop_h = 3 //Numero antes de los dos puntos
prop_v = 2 //Numero despues de los dos puntos

//Minimo del tamaño de pantalla: Porque si se acercan mucho los jugadores se
//                               podría ver con mucho zoom
min_h = 300
min_v = 200[/gml]

En Step:
[gml]//Saber la altura y anchura de la view ------------------------------------------------------------------------------------------------

view_wview[0] = abs(obj_0.x-obj_1.x) + borde_h //El ancho de la view es la distancia horizontal entre los jugadores mas el borde
view_hview[0] = abs(obj_0.y-obj_1.y) + borde_v //El alto de la view es la distancia vertical entre los jugadores mas el borde
if view_wview[0]<min_h view_wview=min_h //Si el ancho de la view es muy poco limitarlo al minimo
if view_hview[0]<min_v view_hview=min_v //Si el alto de la view es muy poco limitarlo al minimo



//Hacer las proporciones ---------------------------------------------------------------------------------------------------------------

if view_wview[0]*prop_v > view_hview*prop_h { //Si el ancho es mayor que lo que deberia
    view_hview[0] = view_wview[0] / (prop_h/prop_v) //Hacer el alto como corresponde
}
else { //Si en cambio el alto es mayor que lo que deberia
    view_wview[0] = view_hview[0] * (prop_h/prop_v) //Hacer el ancho como corresponde
}



//Mover la camara ----------------------------------------------------------------------------------------------------------------------

view_xview[0] = (obj_0.x+obj_1.x)/2 - (view_wview/2) //La coordenada horizontal es igual al promedio de la posicion de los
                                                     //jugadores, es decir justo al medio. Luego se le resta la mitad del
                                                     //ancho porque la coordenada correponde a la esquina superior izquierda
view_yview[0] = (obj_0.y+obj_1.y)/2 - (view_hview/2) //La coordenada vertical es igual al promedio de la posicion de los
                                                     //jugadores, es decir justo al medio. Luego se le resta la mitad del
                                                     //alto porque la coordenada correponde a la esquina superior izquierda[/gml]


En la room chequea "Enable the use of views" y "Visible when room starts"
Luego a los dos "W" los puse en 640 y los "H" en 320




Ya deberia estar, en el ejemplo manejas con las flechas y el otro cuadrado con WASD
399
Preguntas y respuestas / Re:dibujar un entero
Agosto 14, 2012, 06:54:15 PM
Se hace con round(x)
entonces quedaria asi:

draw_text(15,15,"Exp: "+string(round(global.expporciento))+"%")
400
Collision_rectangle como dice el nombre chequea un rectángulo, y place_meeting chequea pixel por pixel. Si el objeto es rectancular recomiendo collision_rectangle porque creo que es mas rapido
401
Es dificil de explicar en el titulo, estoy haciendo un mini-sistema de campos de texto, los campos de texto tienen una propiedad que es el foco (o algo asi) que permite que puedas escribir en el, si no te das cuenta proba en cualquier programa que al hacer click en un cuadro de texto te lo resalta y le quita el enfasis a los otros. Bueno, quiero que al apretar enter el foco vaya al proximo cuadro de texto

Cada cuadro de texto tiene una variable "foco" que es 1 o 0
¿Como puedo saber la instancia que esta justo debajo sin usar for o chequeo de colisiones?
402
Ayayay, yo tampoco me fijo si no ponen el logo :o

Hace lo que te dije, en vez de usar un background usa un sprite y dibujalo
403
En el objeto del HUD al principio pones draw_sprite(...) eso va a dibujarlo justo debajo de los numeros
Con draw_sprite funciona seguro, podes probar con draw_background pero no se donde lo dibuja
404
Me parece que en vez de ese 0 va h
Eso hace que el primer corazón tenga la primera imagen,  el segundo la segunda y asi
Pero en el sprite tiene que haber una subimagen para cada color
405
Eso se hace con una variable, por ejemplo la llamamos 'inmune'

Entonces en el evento create arrastras el cuadrito de 'set variable', el nombre seria inmune y el valor 0 (porque apenas comienza puede recibir golpes)

Despues en todos los lugares que queres que no se haga algo si es inmune (por ejemplo en la parte que te saca vida) agregas esto al comienzo del evento:
Arrastras el cuadrito de 'Check variable' con el nombre de 'inmune' y el valor de 0 y el triangulo que mira para arriba. El triangulo que mira para abajo lo pones al final de todo

En el momento que te saca vida pones 'ser variable' inmune a 1, y pones 'set alarm' alguna alarma que no hayas usado y el tiempo de inmunidad que quieras

Lo último es agregar un evento 'alarm ' con el número que pusiste antes
Adentro pones solamente 'set variable' inmune a 0

Para que se vea transparente creo que en el step pones 'check variable' inmune en 0
Despues 'set variable' image_alpha en 1
Despues pones 'else' y a continuacion 'set variable' image_alpha en 0.5


Me parece que es asi, estoy con el celular y sin el GM a mano