En la room que utilizo para el juego pongo varios arboles pero como el mapa es de 7000x6000 aprox. son muchos arboles por lo que vuelve lento el juego estaba pensando cargarlo externamente pero igual no mas yo creo va ser lento, lei en post de correojon que se puede utilizar instance_deactive() para que solo dibuje lo que que este en la wiew , como hago eso?
saludos
http://www.comunidadgm.org/manual_GM/Desactivando_instancias.htm
Ya vi la ayuda pero tendria un problema si las instancias estarian como si no existieran como le hago para que salgan en el mini mapa? para que se muevan hacia la comunidad o centro del mapa?es para un juego rts/defensa.
saludos^^.
Las instancias que quieras activadas para esa clase de cosas las activas con instance_activate_object después del instance_deactivate_region, si necesitás todas entonces no podrías usar la función
También tené en cuenta cuál es el tamaño del minimapa, podrías directamente hacer q las instancias se desactiven fuera del perímetro del minimapa
bueno como es un juego casi rts todo va tranquilo solo al poner los arboles que son como 300 o mas en el mapa lo vuelve lento, de que otra forma podria solucionar el problema de la lentitud? ya que los arboles son lo unico que molesta .
saludos
Que tal una deforestacion?
Cita de: klys en Junio 04, 2012, 06:08:00 PM
Que tal una deforestacion?
O que sean solo tiles. O es necesario que sean objetos? Si es asi, que no usen eventos step ni draw excesivamente o de forma mala para el rendimiento.
Cita de: klys en Junio 04, 2012, 06:08:00 PM
Que tal una deforestacion?
LOL
Y si los hacés tiles? o uno interactua con ellos?
EDIT: Me leíste la mente MaanuRP o vos a mí?, publicamos al mismo tiempo XD
Como dijo MaanuRP, lo mejor es que uses tiles. Ya que los objetos al ejecutarse por mas que no tenga ninguna acción hace una carga sobre el juego, por ende se pone lento
Cita de: Mgbu en Junio 04, 2012, 06:12:03 PM
EDIT: Me leíste la mente MaanuRP o vos a mí?, publicamos al mismo tiempo XD
Las grandes mentes piensan igual ^^ Jajajajajaj xD
Cita de: J.E.A en Junio 04, 2012, 06:18:41 PM
Como dijo MaanuRP, lo mejor es que uses tiles. Ya que los objetos al ejecutarse por mas que no tenga ninguna acción hace una carga sobre el juego, por ende se pone lento
El problema es que si el jugador se puede chocar una planta no van a servir los tiles, porque no podés chequear esa colisión
Se me ocurre crear un objeto con una máscara del tamaño del nivel, en donde sea tipo puntos, o sea que sería un objeto del tamaño del nivel con "pedacitos" en donde hay una planta, es difícil explicar
EDIT:
Citar
EDIT: Me leíste Te leí la mente MaanuRP o vos a mí?, publicamos al mismo tiempo
O si no so tenía sentido XD
No, puede crear los objetos de los arboles sin problemas. Pero que no le ponga funciones que lleven una demora o consuman mucha memoria en eventos o situaciones repetitivas.
Por ejemplo, si la funcion del arbol es solo para colisionar, puede poner los objetos de los arboles, y el evento de colision tendra que ir en el objeto del Jugador, por lo que no tiene porque ralentizar el juego.
bueno en el objeto arbol solo le puse el evento step con este codigo
depth=-y;
nada mas no tiene nada mas luego esta como visible , solido y persistente, con un sprite asignado obviamente.
tengo una idea que todavia no puse en practica pero que despue lo haga es que si mientras no este en la view cambiar de sprite a uno vacio pero manteniendo mascara no se si funcionara , pero si tiene alguna idea me ayudaria harto ya que lo tengo que tener terminado para dentro de 1 semana.
saludos ^^.
Usá el instance_deactivate_region o un with(arboles) {if x+sprite_width<view_xview[0] or x>view_xview[0]+view_wview[0] or y+sprite_height<view_yview[0] or y>view_yview[0]+view_hview[0] {instance_deactivate_object(self)}} instance_activate_region(view_xview[0],view_yview[0],view_wview[0],view_hview[0],1,1)
EDIT: Obviamente cambiando arboles por el nombre de la instancia de arbol
no puedo utilizar el instance_deactive por que hay enemigos que deben llegar a la comunidad y deben de crear una ruta que no pase por los arboles, y si los desactivo se van ir recto lo cual no quiero, por eso decia que lo podia cambiar de sprite a uno vacio o quitarlo y solo dejar una mascara, ya que si no dibuja nada no creo que lo vuelva lento eso no se jeje, pero eso recien lo voy hacer ya que estoy tratando de solucionar un problema del ia de los enemigos que igual se lentean pero en un momento x por una condicion x que no doy con ello, si no logro arreglarlo eso pedire su ayuda en otro post.
saludos ^^.
Mmmm... parece que el problema es que elegiste un mal evento para el objeto árbol. Supongo que los arboles jamas se moverán en el mapa cierto? En ese caso cambia el evento Step por el evento Create y nada más. Servirá lo mismo, ya que supongo ese código es para darle efecto isometrico al juego.
Pruebalo y avisas que tal mejoró el rendimiento
Saludos Makero usuariocondudas:
Mi propuesta es utilizar arreglos o "arrays". :-[
* Para ello creas un objeto que tendrá dicho "array". Lo llamaremos "campo".
* Divides el mundo en cuadros. Lo conviertes en una cuadrícula que serán las posiciones de los árboles.
* En el "array", cada espacio corresponderá a cada cuadro de la cuadrícula del mundo. Colocarás en cada espacio del 2array" un numero entero que corresponda a cada elemento que quieras dibujar en el mapa. ejemplo: un cero (0) es un espacio vacío por donde se puede mover, un uno (1) es un árbol, un dos (2) es una roca, etc.
* En el evento "draw" del "objeto campo" pones dos ciclos "for" que recorran los espacios del "array" y, según el número encontrado en cada espacio, dibujen uno u otro "sprite" en el espacio de la cuadricula correspondiente.
* Cuando alguna unidad vaya a moverse o a crear un camino para desplazarse en el campo puede utilizar el "array" en el "objeto campo". Verificar si en esa posición hay algún árbol (1) o alguna roca (2) y evita esa área.
De esta forma tienes áreas de colisiones y dibujo de imágenes en un solo objeto. No es pesado para la PC. Si los primeros espacios en el "array" coinciden con los árboles del fondo, simplemente al darle el orden de recorrido del "array" desde adelante hacia atrás los arboles se dibujan correctamente.
Nota: Esta forma no dibuja "sprites" animados, solamente "sprites" estáticos. La división del espacio en cuadros es necesaria para organizar las posiciones. Se puede crear una cuadricula con divisiones del tamaño de un píxel, pero un árbol no será del ancho de un píxel por lo que es valida la división que se proponga.
Ya probé esta forma y es muy eficiente, no ralentiza a la PC. :D
no lo probe pero te informo que eso hize con el terreno en un solo objeto le di 2 for para que me dibuje todo el mapa pero como no es fondo , siempre un objeto tiene que dibujarse a cada momento , talvez tu mapa no fue grande , pero con los for lo volvia lento lentisimo por eso decidi cargarlo externamente como fondo.
saludos ^^.
PD:probe con poner depth en create funciona, ya pruebo en otro pc por que la mia es core i5 y aca todo va full jeje ya lo pruebo en un core de las primeras si funca bien ya lo dare por solucionado.