Problema con script (Necesito respuesta rapida)

Publicado por brunoxzx, Mayo 13, 2011, 05:26:42 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

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

Maniarts

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

brunoxzx

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

Killer

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.

brunoxzx

#4
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).

Killer

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.

brunoxzx

#6
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.

Killer

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

brunoxzx

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.

Tyranus

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.

brunoxzx

#10
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"

Powered by EzPortal
SMF spam blocked by CleanTalk