[CODE] scrollSuperCam, uno de esos códigos mágicos jeje..

Started by Erkosone, June 19, 2013, 02:04:28 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

y por que no hacerlo ajustando simplemente speed en cada momento?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

Haber, que el sistema que tiene bennu como el de div están muy bien, yo no digo que haya que hacerlo ni de un modo ni de otro, solo he puesto un ejemplo de una cámara con integración proporcional, es solo una opción mas, ya cada cual usa lo que le parece mejor para el.

SplinterGU

no, es que yo no digo que el de bennugd este bien y tu sistema este mal.

simplemente intento entender por que y para que...

me parece genial lo que has puesto, las preguntas van mas orientadas a una posible integracion con lo actual, no quiero integrar algo y que luego venga alguien y me diga

"oye, splinter, eres un puto idiota, esto ya esta soportado! para que implementas cosas al pedo!"

o sea, es aceptable que cualquiera haga una opcion mas a lo que esta u otra forma de hacerlo, pero yo siendo quien mantiene el proyecto oficial, no puedo hacer algo que ya esta promocionandolo como algo nuevo o innovador.

se entiende? claro que me gusta y me interesa lo que has puesto.

espero que no se haya mal interpretado, solo pregunto porque intento entender los detalles del asunto.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

JaViS

me perdi, que es lo que tiene DIV, Fenix y Bennu que es parecido?
Working on Anarkade. A couch multiplayer 2D shooter.

FreeYourMind

oye, splinter, eres un puto idiota, esto ya esta soportado! para que implementas cosas al pedo!

SplinterGU

Quote from: FreeYourMind on June 19, 2013, 07:30:28 PM
oye, splinter, eres un puto idiota, esto ya esta soportado! para que implementas cosas al pedo!

diablos! cai!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

Vale, haber si logro explicarme y que se me entienda  :)


Hablo del sistema que tenía Div/Div2, si bennuGD tiene algo nuevo pues me lo comentais por que quizá he obviado algo..


Vale, haber, en Div el scroll puede controlarse de dos formas, la primera y mas rudimentaria es a mano manipulando las variables x0 y0 x1 y1, esto es bastante horrible, por esto existe la segunda forma que es asignando el ID de un proceso al campo camera de la estructura scroll.


SPEED indica la velocidad máxima a la que puede desplazarse el primer plano de un scroll, esto quiere decir que si el personaje se desplaza a mas velocidad que a la que puede moverse el scroll simplemente podrá salirse del campo de visión, esto creo que era así, si me lo confirmáis mejor que mejor.


El caso es que, tanto el primer como el segundo sistema están completamente desligados de cualquier interpolación, osea, son simples movimientos rudos o "bruscos" sin ningún tipo de aceleración.


Esto quiere decir simplemente que si scroll.speed = 1 nuestro scroll podrá desplazarse a un máximo de 1 pixel / frame, PERO.. nunca a menos de esa velocidad, ni tampoco a mas de esa velocidad, unica y exclusivamente a esa velocidad.

Lo que yo he propuesto explicado detalladamente y en profundidad es:


1 - Se crea un proceso superCam()
2 - Se indica el ID del proceso que ha de llevar la cámara.
3 - Se indica una distancia con el proceso que ha de llevar la cámara.
4 - Se indica una "dureza" o "factor de elasticidad" para realizar una integral de distancia.
5 - Se aplica la integral de Verlet para posicionar al proceso superCam().


Todo esto no es mas que aplicar física dinámica a la cámara del scroll, simplemente como una integral cualquiera en sucesivas iteraciones irá posicionando al proceso superCam() a la distancia establecida del proceso que lleva la cámara en el juego, he aquí el factor "elasticidad" el cual permite que la integración de posición sea mas o menos rápida.


Esto da como resultado un sistema que:


A - Cuando la distancia es grande la modificación de la posición del proceso superCam() es grande.
B - Cuando la distancia es pequeña la modificación de la posición del proceso superCam() es pequeña.
C - En realidad, como se trata de un cálculo trigonométrico no hay ni grande ni pequeño, hay una "proporción" que creo que es "exponencial" en función de la distancia.




Supongo que ahora si que queda mas clara la diferencia del sistema de camara de Div/Fenix/bennu/etc etc.. y lo que estoy proponiendo ;)


Se trata de un sistema dinámico, el cual mediante la definición de una distancia y una elasticidad maneja la cámara por la integral de Verlet y no a lo burro como hace Div  ;D

Erkosone

He grabado un vídeo donde se ve la diferencia entre scroll.speed y scrollSuperCam().
En breve estará disponible, creo que una imagen vale mas que mil palabras, con esto creo que el concepto de "cámara proporcional" quedará mas claro.

Erkosone

Ejemplo de lo que comentaba, el scroll.speed impone una velocidad fija para la cámara, mientras que la que he compartido es variable.
Yo me imagino un posible sistema de cámara dinámica para bennu con algo como:
scroll.camera -> podría ser lo que yo llamo idToFollow.
scroll.elasticity -> la elasticidad de la interpolación.
scroll.dinamicCamera -> [true|false] para activar la elasticidad "e internamente un calculo similar al mio", o dejar el scroll como siempre ha estado.


Pero vamos, que solo es una idea, haber que le parece al resto de gente.
http://www.youtube.com/watch?v=P0fS8FQ2TW0&feature=youtu.be


No se, a mi me parece muy obvio viendo el vídeo que son muy diferentes jeje.

JaViS

Yo creo que la diferencia es bastante notable.


Felicitaciones y gracias por compartir el recurso!! :D
Working on Anarkade. A couch multiplayer 2D shooter.

SplinterGU

claro, no se ha entendido lo que yo he dicho.

yo digo que en tu funcion vayas variando speed, simplemente cambiando el valor de speed segun la distancia que estas del objeto.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

JaViS

Quote from: SplinterGU on June 20, 2013, 04:10:50 PM
claro, no se ha entendido lo que yo he dicho.

yo digo que en tu funcion vayas variando speed, simplemente cambiando el valor de speed segun la distancia que estas del objeto.


Quizas se pueda aplicar esa funcion a la variable ya existente de Bennu para hacerlo mas 'integrado'
Working on Anarkade. A couch multiplayer 2D shooter.

Erkosone

Haa vale.. ahora lo he entendido, vale lo tendré en cuenta, voy a mirarlo.

panreyes


Holas. ¿Y por qué no utilizar una ecuación que haga la magia?


Yo utilizo esto en casi todos mis juegos:


//proceso camara para scroll[].camera
pasos=7;
x+=((x_objetivo-x)/pasos);
y+=((y_objetivo-y)/pasos);

JaViS

Working on Anarkade. A couch multiplayer 2D shooter.