Mayo 13, 2011, 05:26:42 AM Ultima modificación: Mayo 13, 2011, 06:22:27 AM por brunoxzx
Hola tengo un problema con este script. en el juego al pisar un boton se ejecuta un script que hace esto.

todo el juego se queda en pausa y la view se va a una puerta y se ve como se habr? la puerta mientras el juego esta en pausa, despu?s la view vuelve a ti y la pausa se quita.

todo funciona perfecto a corta distancia, pero si el bot?n esta muy lejos de la puerta por alguna raz?n en la imagen de pantalla que se toma para simular que esta en pausa no aparece ning?n objeto solo tiles.


[gml]ide.ide5=id with(ide){visible=0 ide.visible=0 ir=view_object if variable_local_exists("ide2"){ide2.visible=0}}
view_object=ide
screen_redraw()
global.bak=background_create_from_screen(view_yview,view_xview,view_xview+view_wview,view_yview+view_hview,0,0)
instance_deactivate_all(1)  instance_activate_object(ide) instance_activate_object(ide.ide)
with(ide){
visible=1
ide.visible=1
alarm[0]=5
if variable_local_exists("ide2"){instance_activate_object(ide2) ide2.visible=1}}[/gml]

Gracias de antemano.

P.D: tengo prisa por que tengo que enviar el juego a alguien y es importante que todo este bien

P.D2: como veran no hay nada que diga que la view regrese a ti pero eso se ejecuta en el alarma 0 de la puerta

Solo te puedo recomendar encerrar en corchetes {} las funcionciones del primer if

Pues yo veo que si tiene corchetes  8). a nadie se le ocurre otra cosa?

Noto que tienes:

[gml]background_create_from_screen(view_yview,view_xview,view_xview+view_wview,view_yview+view_hview,0,0)[/gml]

cuando lo normal seria:

[gml]background_create_from_screen(view_yview,view_xview,view_wview,view_hview,0,0)[/gml]

No se si lo necesitas as? o es un error. A?n as? no deber?a ser la fuente del problema, revisa que el c?digo no se este ejecutando dos veces, que resultar?a en la segunda toma con todos los objetos desactivados remplazando la normal.

A parte de eso, a simple vista no se me ocurre que podr?a estar causando el problema.

#4 Mayo 14, 2011, 03:11:09 AM Ultima modificación: Mayo 14, 2011, 04:43:16 AM por brunoxzx
oh si deber?a ir as? solo que lo cambie por si acaso era la fuente del problema  ;D.

Conforme a lo de revisar si se ejecuta varias veces creo que eso realmente podria ser, ayer lo pense pero me limite a checar en el c?digo y nunca en debug mode, revisare y edito si encontr? algo raro.

Edit: Parece ser que si se ejecuta varias veces  :-[ pero no encuentro el porque  :-X.

Edit2: parece ser que la causa del problema es que al pisar el bot?n se ejecuta el codigo y se supone que no se vuelve a ejecutar hasta que te quites y vuelvas a pisarlo pero como se desactiva tu personaje (que es el que pisa el boton) es como si lo dejaras de pisar.

Edit3: Parece ser que todos mis anteriores edits son falsos y solo se ejecuta una vez  :'(.

ev step
[gml]if place_meeting(x,y,par_humano) or place_meeting(x,y,obj_caja) {if !tocar{tocar=1 desactivar(ide)}}else{tocar=0}
image_index=tocar[/gml]

Este es el codigo que ejecuta el script de mas arriba el script se llama desactivar, no parece haber nada raro en el para mi.

Este es el c?digo de draw, hehe uso gm8.1.

ev draw
[gml]draw_self()
if background_exists(global.bak){
draw_background(global.bak,view_xview,view_yview)}[/gml]

Tampoco creo que tenga algo que ver con mi problema.

Ahora te explico por que pens? que se ejecutaba barias veces y lo que hice.

primero le a?ad? un sleep al script.
[gml]global.bak=background_create_from_screen(view_yview,view_xview,view_xview+view_wview,view_yview+view_hview,0,0) sleep(1000)
instance_deactivate_all(1)[/gml]

Despu?s en debug mode, revise las variables del bot?n y la variable "tocar" era igual a cero lo cual me hizo pensar que el script se ejecutaba mas de una vez, as? que puse por todas partes del script tocar=1, aun as? "tocar" segu?a siendo 0, despu?s me di cuenta de que si tu personaje no existia nadie iva a poder colisionar con el objeto boton y tocar se aria 0, as? que modifique este c?digo y quedo as?.
[gml]if place_meeting(x,y,par_humano) or place_meeting(x,y,obj_caja) {if !tocar{tocar=1 desactivar(ide)}}else{tocar=!instance_exists(obj_tu)}
image_index=tocar
[/gml]

Aun as? "tocar" segu?a siendo 0 (de echo aun no entiendo la raz?n) de que sea 0, al final termine poniendo esto al principio del c?digo desactivar().

[gml]if !instance_exists(obj_tu){game_end()}[/gml]
Y nunca se acabo el juego repentinamente as? que eso me hace pensar que si tu personaje existe al principio del script significa que la foto de pantalla se ejecuta mientras tu personaje sigue activado (Creo que pude haber escrito esto ultimo nada mas y habr?an entendido que todo estaba activado al tomar la foto ;D).

Una pregunta un tanto tonta, pero estas desactivando objetos lejanos a la view para mejorar el desempe?o?

Como mencionas que solo ocurre a partir de cierta distancia, se me ocurre que tal vez estas tomando la imagen cuando los objetos ya est?n desactivados.

S? que es poco probable, pero es mejor cubrir todas las posibilidades.

#6 Mayo 14, 2011, 05:42:06 AM Ultima modificación: Mayo 14, 2011, 06:02:49 AM por brunoxzx
nope no lo hago, pero creo que deb? de haberlo especificado antes.

Edit: algo importante guarde una imagen de pantalla con la funci?n screen_save() y en la imagen si se veian los objetos XD, despu?s guarde el background con background_save() y la imagen era de 0 bytes y obviamente no se ve?a nada, creo que podr?a importar el screen shot y ponerlo de background, pero me gusstaria aclarar esta duda.

En ese caso no se me ocurre que puede causar el problema. Perdona que no te pueda ayudar.

Espera aver si se te ocurre algo al ver esto.

Algo importante guarde una imagen de pantalla con la funci?n screen_save() y en la imagen si se veian los objetos , despu?s guarde el background con background_save() y la imagen era de 0 bytes y obviamente no se ve?a nada, creo que podr?a importar el screen shot y ponerlo de background, pero me gusstaria aclarar esta duda.

Si estas desactivando todas las distancias y solamente creas una textura con el tama?o y el lugar de lo que estas viendo en el momento de pausarla va a pasar eso, porque es justo lo que tu c?digo esta pidiendo que se haga.
Es decir,
sacas una foto de lo que pasa en la view y desactivas todas las instancias. El espacio que ocupe la textura que creas para el background va a funcionar bien, pero en cuanto salgas del tama?o de la textura que creaste se van a dejar de ver las instancias (porque las desactivastes) y se van a dibujar los tiles y los backgrounds porque a estos no los desactivas.

Incluso creo que tu error de poner
[gml]background_create_from_screen(view_yview,view_xview,view_xview+view_wview,view_yview+view_hview,0,0)[/gml]
en lugar de esto como dice Killer:
[gml]background_create_from_screen(view_yview,view_xview,view_wview,view_hview,0,0)[/gml]

Te ayudo con la confusi?n, porque la imagen que creabas era m?s grande de lo que estabas viendo en esa view y surg?a el efecto de que pareciera que a la distancia dejaba de funcionar, cuando desde un principio estaba mal planteado el c?digo.

Realmente no tengo idea de como puede afectar la performance del juego, pero siguiendo esa l?gica con el c?digo lo que tendr?as que hacer es:
[gml]background_create_from_screen(0,0,room_width,room_height,0,0)[/gml]

Saludos.

#10 Mayo 14, 2011, 06:34:52 AM Ultima modificación: Mayo 14, 2011, 06:43:11 AM por brunoxzx
Dios mio funciono  :D,oh creo que si hubiera checado un bot?n con poca distancia a la puerta despu?s de cambiar el c?digo al de killer me habr?a dado cuenta.

Much?simas gracias a los 2.
hehe hasta ahora me di cuenta de lo de  "s?ver la atse otse"