Consultas sobre juego arkanoid

Hola hugo.

Testea a fondo las colisiones porque me estan dando problemas,especialmente objetos dinamicos con no dinamicos,con sensor y sin sensor.

Hola @hokuto, voy a revisar eso que me comentas más tarde, cualquier cosa te consulto.

Por cierto, sobre las colisiones, tuve algunos problemas entre colisiones de sensores y figuras dinámicas. ¿probaste si se llama a la función “cuando_colisionan”?, puse un comentario de esto al final de la documentación: PilasEngine

Hola Hugo.

Si que mire esa funcion y no funciona,la unica que funciono fue “cuando_colisiona()”,pero al colisionar se pone en rojo donde pone interprete y se bloquea.

Pero se bloquea al eliminar mi jugador,si elimino el otro objeto no pasa nada,me paso lo mismo con la funcion “obtener_distancia_entre_actores”.

Ayer descubri otra cosa,mi jugador es una barra y tiene una pelota encima,como un arkanoid,entonces cuando pulso el espacio la pelota cae colisiona con la barra y es impulsada,lo curioso es que me fallaba cuando tenia puesto en rebotes a 1.5 pero ayer me fallo poniendolo a uno,algunas veces al caer la pelota atraviesa la barra y el suelo.

Si quieres te paso el ejemplo donde hago mis pruebas,ahora mismo no puedo continuar con el por los errores descubiertos.

@hokuto, si es posible enviame el ejemplo y lo miro. Me imagino que la pelota debe estar ingresando en el area de colisión en lugar de rebotar ni bien entra en contacto. Es un problema de física de juegos bastante común, si es eso lo podríamos resolver viendo el código.

Aqui te dejo el ejemplo,has todas las pruebas que te he comentado y empieza por el codigo del enemigo mono que esta comentado.

Y ya que estoy te dejo una sugerencia,al crear un actor este sale directamente en el escenario pero si tengo muchos actores desactivados se llena todo y es algo incomodo el trabajar,seria mejor que al crear los actores se quedaran en la interfaz y si quieres que aparezca, lo agarras y lo sueltas con el raton en el escenario y asi evitamos que se llene todo.

Hola @hokuto, ahí encontré donde estaba el problema. Resulta que cuando el actor “protagonista” deja de existir, porque se llama a “protagonista.eliminar()”, la función obtener_actor_por_nombre retorna al actor eliminado y lo que siga produce un error.

Hice este cambio en los dos lugares en donde se intentaba acceder al protagonista
desde actor “enemigo” y funcionó bien:

En la función “actualizar”:

En la función “mirar”:

image

Te paso la versión modificada:

https://app.pilas-engine.com.ar/#/proyecto/29c74608-10ea-402d-918e-5b1002d41f29

De todas formas, me quedé pensando en formas copadas de poder resolver
estos problemas directamente desde el motor, por un lado es cierto que no
aparece ningún mensaje de error, eso es algo que tengo que corregir… fue difícil
encontrar el error sin ver exactamente dónde fallaba. También me quedé pensando
si lo más correcto no sería que la función “obtener_actor_por_nombre” emita un error
en el momento en que no encuentra un actor, en lugar de devolver null o un actor que no
está vivo … voy a pensarlo un poco más a ver que conviene hacer.

Ah, por cierto, con respecto a tu sugerencia de limpiar la pantalla de actores desactivados. Fijate que en el menú contextual hay una opción para mover el actor a una escena nueva:

image

Esto es bastante útil, porque no solo vas a poder quitar los
actores del área de trabajo, sino que también vas a poder activarlos en esas escenas
nuevas y probarlos de forma aislada más fácilmente.

Gracias Hugo,funciona muy bien.

En gamemaker no hay que usar ninguna funcion para hacer referencia a una clase y asi llamarla desde otra,si tienes un objeto con el nombre de jugador lo puedes llamar simplemente poniendo jugador y para acceder a sus propiedades puedes poner jugador.x,jugador.velocidad etc…

Y si quieres eliminarlo desde otra clase haces esto.

with(jugador){
    instace_destroyd();
}

Sobre la sugerencia,pues si muevo los objetos a otra escena no puedo seguir haciendo pruebas en mi escena principal porque esos actores desactivados interactuan con el codigo de otros,pero se me ha ocurrido una solucion.

En construct y clickteam fusion puedes desplazarte por todo el escenario y ver la parte de fuera de este,lo que se hace es colocar los objetos activos en dentro y los desactivados fuera del escenario y ya no molestan.