¿Alguien se acuerda de como desplazar el scroll?

Started by Drumpi, June 28, 2010, 12:56:03 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Hola a todos:

Una vez más, uno de mis fallos tontos.
Resulta que estoy usando un scroll por el que se mueve un protagonista (sólo hacia la derecha), y tengo puesto que:
scroll[0].camera=prota_info.id;
Vale, pues quiero que el prota no se vea centrado en pantalla, así que he creado una región de movimiento y se la he asignado al scroll:
define_region(1,0,0,100,240);
scroll[0].region1=1;

Pero el prota sigue centrado en todo momento. El tamaño de la pantalla es 320x240

De paso he hecho otra prueba que me ha hecho cosas raras: he cambiado la region por
define_region(1,100,0,220,240);
Y lo que ha hecho ha sido que el personaje se ha movido hasta salir por el lado derecho de la pantalla, y de golpe, el scroll se ha vuelto a centrar sobre él.

¿Qué he pasado por alto esta vez? :S
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

fijate el ejemplo que este en el link de mi firma
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Pues no lo entiendo, porque he hecho lo mismo ???
A ver si esta tarde, dentro de un rato te pillo por el msn, y de paso me haces un favorcito ;)
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Hokutoy

No lo he acabado de entender... quieres que el scroll NO se centre sobre el protagonista? Entonces sobre que se centra? Es automatico? Quieres que siga al prota pero solo para adelante?
Puedes poner un ejemplo de un juego existente que tenga el mismo scroll que tu quieres realizar?

Saludos!

BoMbErLiNk

Yo le asignaría la camara a un proceso que persiga al personaje, en lugar de al personaje.

Si lo sigue unos pixeles a la izquierda el personaje se verá más a la derecha, etc..

FreeYourMind

Se puede atribuir un id a un proceso ? Otra cosa, estaba matando el proceso padre y los hijos no morian, esto no era así en DIV ?

Windgate

Quote from: FreeYourMind on June 29, 2010, 11:47:49 AM
Se puede atribuir un id a un proceso ? Otra cosa, estaba matando el proceso padre y los hijos no morian, esto no era así en DIV ?

El ID del proceso se asigna automáticamente, creo que lo puedes cambiar, pero eso podría provocar ejecuciones bizarras y crashes en cualquier momento porque revientas la jerarquía de procesos.

Para que un proceso al morir mate a sus hijos deberías usar la signal S_KILL_TREE que mata a todo el árbol.

@Drumpi: En cuanto al movimiento del scroll, recuerda que tienes que poner a 0 el valor de ratio, y que no debe haber ningún proceso asignado en camera. Lo he hecho mil veces y nunca ha dado problemas si tienes eso en cuenta.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

FreeYourMind

Ya se que se asigna, pero quiero matar por ejemplo sólo un proceso por su id (y no arvol de procesos con el mismo nombre, usando type por ejemplo).

Grácias, ya ni me acordaba del s_kill_tree.

Drumpi

Si matas a un proceso, los hijos quedan huerfanos y pasan a depender del proceso main (miradlo en la ventana de debug).

Al final he hecho lo que dice Bomber, otro proceso sin gráfico actuando de cámara (cualquier juego de desplazamiento lateral no se centra en el prota, sino que va un poco por delante para ver lo que se avecina con antelación).
De todas formas, anoche lo estuve hablando con Splinter, y no se si es que realmente hay un comportamiento errático en el scroll o es que es así, pero creía recordar desde tiempos de DIV que scroll.region1 servía preciasmente para esto. Montaría un ejemplo, pero no tengo tiempo, y menos para cambiar de SO.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

DjSonyk

Creo que te equivocas con el comportamiento de Region1 en este caso.
Manual original DIV:
Region1 - Ventana de scroll automatico.Region de bloqueo de scroll,por defecto su valor es -1,lo que implica que no hay ninguna region de bloqueo.Si se define previamente con la funcion define_region() ,entoces el sistema no movera el scroll mientras el proceso camara permanezca en la misma.

Ahora bien, si el scroll es ciclico,su mayor parte del tiempo el proceso camara estará centrado en la region del juego , pero si no lo es ,el proceso camara solo estará centrado en la region del juego,mientras no se llegue a los limites mapa/scroll.
Lo suyo seria,como te ha comentado tu compañero que crees otro proceso para la camara.
Yo lo que hago es en los juegos tipo naves es el scroll automatico,para mover la nave libremente por la region y en tipo plataformas el que sigue al personaje,aun asi Drumpi muy pero que muy pequeña tienes que hacer la ventana del juego para no ver a la vecina....digo lo que se te avecina ^^.

SplinterGU

Quote from: BoMbErLiNk on June 29, 2010, 08:47:14 AM
Yo le asignaría la camara a un proceso que persiga al personaje, en lugar de al personaje.

Si lo sigue unos pixeles a la izquierda el personaje se verá más a la derecha, etc..

asi lo hicimos anoche bomber... :)

un proceso dummy sin grafico que vaya por delante del proceso camara, con un speed=2 para que no haga muy brusco el centrado y no 1 para que no quede retrasado. Al menos debe ser 2 de speed.

Quote from: FreeYourMind on June 29, 2010, 11:47:49 AM
Se puede atribuir un id a un proceso ? Otra cosa, estaba matando el proceso padre y los hijos no morian, esto no era así en DIV ?

Quote from: Windgate on June 29, 2010, 12:09:59 PM
El ID del proceso se asigna automáticamente, creo que lo puedes cambiar, pero eso podría provocar ejecuciones bizarras y crashes en cualquier momento porque revientas la jerarquía de procesos.

Para que un proceso al morir mate a sus hijos deberías usar la signal S_KILL_TREE que mata a todo el árbol.

@Drumpi: En cuanto al movimiento del scroll, recuerda que tienes que poner a 0 el valor de ratio, y que no debe haber ningún proceso asignado en camera. Lo he hecho mil veces y nunca ha dado problemas si tienes eso en cuenta.

wind, ratio es la velocidad relativa del 2do plano y para que el scroll sea automatico debe existir camera asignado, lo que vos estas diciendo es un scroll manual.

Quote from: FreeYourMind on June 29, 2010, 11:47:49 AM
Se puede atribuir un id a un proceso ? Otra cosa, estaba matando el proceso padre y los hijos no morian, esto no era así en DIV ?

free aca tampoco es asi, estas usando la funcionalidad tree del kill.

Quote from: Drumpi on June 29, 2010, 01:23:27 PM
Si matas a un proceso, los hijos quedan huerfanos y pasan a depender del proceso main (miradlo en la ventana de debug).

Al final he hecho lo que dice Bomber, otro proceso sin gráfico actuando de cámara (cualquier juego de desplazamiento lateral no se centra en el prota, sino que va un poco por delante para ver lo que se avecina con antelación).
De todas formas, anoche lo estuve hablando con Splinter, y no se si es que realmente hay un comportamiento errático en el scroll o es que es así, pero creía recordar desde tiempos de DIV que scroll.region1 servía preciasmente para esto. Montaría un ejemplo, pero no tengo tiempo, y menos para cambiar de SO.

los procesos huerfanos son eso, huerfanos, no pertenecen a nadie.

te lo explique anoche, el problema es que se intenta centrar cuando la diferencia a centrar es demasiado grande.

el scroll esta funcionando bien.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: DjSonyk on June 29, 2010, 02:38:53 PM
Creo que te equivocas con el comportamiento de Region1 en este caso.
Manual original DIV:
Region1 - Ventana de scroll automatico.Region de bloqueo de scroll,por defecto su valor es -1,lo que implica que no hay ninguna region de bloqueo.Si se define previamente con la funcion define_region() ,entoces el sistema no movera el scroll mientras el proceso camara permanezca en la misma.

Ahora bien, si el scroll es ciclico,su mayor parte del tiempo el proceso camara estará centrado en la region del juego , pero si no lo es ,el proceso camara solo estará centrado en la region del juego,mientras no se llegue a los limites mapa/scroll.
Lo suyo seria,como te ha comentado tu compañero que crees otro proceso para la camara.
Yo lo que hago es en los juegos tipo naves es el scroll automatico,para mover la nave libremente por la region y en tipo plataformas el que sigue al personaje,aun asi Drumpi muy pero que muy pequeña tienes que hacer la ventana del juego para no ver a la vecina....digo lo que se te avecina ^^.

exacto, lo que pasa es que el juego de drumpi, no se mueve hacia atras, ni hacia los costados, SIEMPRE va hacia adelante, entonces siempre esta en el limite borde, y por ende se centra automatico "siempre", o sea, siempre esta fuera de region.

es lo que intentaba explicarle.

pero bueno, ya esta solucionado con un proceso camara dummy sin grafico que va por delante del proceso protagonista, sin region1 y con un speed=2.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Sí, el proceso fantasma es lo mejor, incluso se le puede aplicar un seno a su movimiento para hacer efectos de ondas en la "cámara" y otras cosas así.

Cualquier ejemplo siempre es de agradecer Drumpi, si tienes tiempo, claro.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

en el caso del juego de drumpi, tiene que ir recto, solo unos 150 pixels adelante del proceso sobre la coordenada x, no es un juego de naves.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

tambien puede hacerse el movimiento del scroll manualmente, ¿no?

segun yo era modificando, lo hice en humos.

scroll.x
scroll.y
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)