Oficial Resolución de DUDAS en Game Maker

tienda de móviles online
Mensajes
1
Puntos
1
Estimados, necesito ayuda por favor.
Resulta que estoy haciendo un juego tipo "The Lost Vikings" y necesito saber cómo hacer para poder cambiar entre los jugadores.
De ante mano muchas gracias
 
OP

YoshiFanGM

Gimmick Master
Colaborador
Mensajes
1.064
Calificaciones
491 3
Puntos
160
Ubicación
MTY
Estimados, necesito ayuda por favor.
Resulta que estoy haciendo un juego tipo "The Lost Vikings" y necesito saber cómo hacer para poder cambiar entre los jugadores.
De ante mano muchas gracias
Hmm desconozco la estructura de tu juego pero, yo lo haría creando una variable global que almacene el objeto del jugador que controlas actualmente (el object_index), y checar esa variable antes de mover a un jugador.

Esa variable la pondrías en un objeto nuevo:

PHP:
// Evento Create
global.jugador_actual = obj_jugador1;
(Si no sabes cómo poner código, seleccionas la acción "Execute Code" de la categoría "control" de acciones)

Suponiendo que para todos los jugadores tienes asignados los mismos botones para que se puedan mover... en cada jugador debes checar primero si esa variable tiene asignado el object_index del jugador actual, antes de moverse:

PHP:
// Evento Keyboard de un jugador (o en donde tengas para moverse)
if (global.jugador_actual == object_index)
{
  // Moverse
}
Así solo tienes que cambiar la variable global.jugador_actual asignándole el objeto de otro personaje, cuando desees cambiarlo.

Y para que la cámara siga al jugador que tengas seleccionado, solo debes usar la variable view_object[0] y asignarle el global.jugador_actual:

PHP:
// Evento Step
view_object[0] = global.jugador_actual;
 
Última edición:

Khyze

Muchos merecen morir!
Colaborador
Mensajes
4.419
Calificaciones
2K 23
Puntos
325
Ubicación
Patria, patria, patria querida!
Como hago una especie de rebote con direccion?

Osea, las balas van de abajo hacia arriba, lo que con las cosas default seria con la direccion en 90, si choca en una pared superior el rebote seria la direccion contraria, la cual seria 270.

Pero la cosa es distinta con una direccion algo inclinada, digamos la direccion de 135, la contraria seria 315, pero la cosa es distinta aqui, digamos que golpea con una pared de un lado (vertical) no seria logico que rebotara a su contraria (Quiza diagonal si cause este efecto), pero con una pared vertical la direccion correcta a la que deberia apuntar seria como 45.

Lo que me confunde es como hacerlo, la direccion no es siempre asi, puede caer 120 o 140 (Hay 360 posibles direcciones, o como 180 si solo cuento para arriba, o 100?), es algo que requiere matematica :v (Nunca me salen bien esas cosas :p)

Creo que es algo simple, pero llevo rato pensando y no se me ocurre una forma eficaz xD (Seh, me quedo Matematica y Fisica y tuve que cambiarme de profesion :s)
 
OP

YoshiFanGM

Gimmick Master
Colaborador
Mensajes
1.064
Calificaciones
491 3
Puntos
160
Ubicación
MTY
Como hago una especie de rebote con direccion?

Osea, las balas van de abajo hacia arriba, lo que con las cosas default seria con la direccion en 90, si choca en una pared superior el rebote seria la direccion contraria, la cual seria 270.

Pero la cosa es distinta con una direccion algo inclinada, digamos la direccion de 135, la contraria seria 315, pero la cosa es distinta aqui, digamos que golpea con una pared de un lado (vertical) no seria logico que rebotara a su contraria (Quiza diagonal si cause este efecto), pero con una pared vertical la direccion correcta a la que deberia apuntar seria como 45.

Lo que me confunde es como hacerlo, la direccion no es siempre asi, puede caer 120 o 140 (Hay 360 posibles direcciones, o como 180 si solo cuento para arriba, o 100?), es algo que requiere matematica :v (Nunca me salen bien esas cosas :p)

Creo que es algo simple, pero llevo rato pensando y no se me ocurre una forma eficaz xD (Seh, me quedo Matematica y Fisica y tuve que cambiarme de profesion :s)
Creo que aquí lo mejor sería que usaras la acción de Bounce (categoría main1), solo seleccionando la opción "precisely" en el primer espacio. Solo lo he probado con bloques cuadrados, pero me ha funcionado bien para tener rebotes más precisos.

Siento no poder dar una solución completa en GML :oops: Yo tampoco se mucho de físicas. Creo que se puede hacer multiplicando el hspeed o el vspeed por -1, pero solo funciona al rebotar con las orillas del room o del view.
 
Mensajes
264
Calificaciones
115
Puntos
30
Ubicación
Desde Navolato vengo dicen que nací en el roble ♥
chicos, tengo una duda con una mascara

La cosa es que quiero dibujar un rectángulo que abarque toda la pantalla, para dejarlo al fondo de otros objetos, y quiero que tenga una colisión en toda la pantalla, pero se me hace muy cutre ponerle un sprite cuadrado y estirarlo con image_xscale e image_yscale
¿cómo puedo sólo ponerle la máscara que abarque todo y ya? Igual si no hay respuesta lo dejaré en lo del sprite estirado, igual no se ve cuando uso el evento draw
 

Khyze

Muchos merecen morir!
Colaborador
Mensajes
4.419
Calificaciones
2K 23
Puntos
325
Ubicación
Patria, patria, patria querida!
chicos, tengo una duda con una mascara

La cosa es que quiero dibujar un rectángulo que abarque toda la pantalla, para dejarlo al fondo de otros objetos, y quiero que tenga una colisión en toda la pantalla, pero se me hace muy cutre ponerle un sprite cuadrado y estirarlo con image_xscale e image_yscale
¿cómo puedo sólo ponerle la máscara que abarque todo y ya? Igual si no hay respuesta lo dejaré en lo del sprite estirado, igual no se ve cuando uso el evento draw
Yo hago las colisiones asi:
Código:
if argument0>=argument2 and argument0<=argument2+argument4
if argument1>=argument3 and argument1<=argument2+argument3
return 1; else return 0;
Also asi, seria x,y,x2,y2,tamañox,tamañoy. Puedes hacer variaciones, que quieres hacer exactamente? es muy raro xD

O esta collision_rectangle
 
Mensajes
264
Calificaciones
115
Puntos
30
Ubicación
Desde Navolato vengo dicen que nací en el roble ♥
Código:
if argument0>=argument2 and argument0<=argument2+argument4
if argument1>=argument3 and argument1<=argument2+argument3
return 1; else return 0;
Es curioso que des ese código, justo hice un string así (sólo que con x3 y y3, en vez de dar tamaños) xD

O esta collision_rectangle
Esto buscaba exactamente, sabía que hay alguna función para eso pero no sabía cual era. Gracias c:
 
Mensajes
264
Calificaciones
115
Puntos
30
Ubicación
Desde Navolato vengo dicen que nací en el roble ♥
Buenas, otra vez vengo a molestar con código que ya es funcional c:

en un objeto e_blanco tengo este código en el evento global right release del mouse
Código:
if(click) {
    depth=0;
    var inst;
    inst = collision_point(mouse_x, mouse_y, e_blanco, 0, true);
    if(inst!=noone)
        with inst {
            instance_destroy()
        }
}
el cual dice que si e_blanco tiene un click, que cheque si éste está sobre un objeto de su mismo tipo. Si lo está, que elimine a el objeto sobre el que está y prevalezca el objeto actual.

Reitero, funciona, pero mi duda es ¿puede ser más eficiente el código? Es la forma en la que se me ocurrió hacerlo
 
Última edición:
Arriba Pie