Un pequeño detalle que vamos a corregir ahora son los valores extremos.
Este 15 lo hemos determinado, entre otras, porque lo hemos probado en la pantalla.
Pero a lo mejor probando en otro dispositivo o probando en alguna otra configuración no tienen que ser
15 y menos 15.
Tienen que ser 18 y menos 18 o 65 y 65.
Qué se os ocurre?
Qué puedo hacer para intentar paliar este problema de tenerlo escrito a piñón en medio del código?
Poner una variable, acordaros o dicho cualquier valor que haya en medio del código es una muy mala
práctica.
Este 15 y menos 15 que sean valores escritos a piñón en medio del código es muy malo.
Es tan malo que de hecho voy a venir aquí arriba y lo primero que voy a hacer es añadir un públic float.
Cómo llamaríamos a la variable?
Como es el rango de valores permitido en el eje de las X?
Un buen nombre es X ranjit, el rango en el eje de las X.
Entonces el rango en el eje de las X va a ser igual a 15 punto cero f.
Y este va a ser el valor que se va a utilizar dentro del Código.
El día de mañana exportamos a un móvil que es más grande, es el 15 por 18, por 20.
Es a un móvil de abuela de 300 píxeles de ancho.
Puedes cambiáis esto por un menos 1 1.
El rango disponible.
A ver, también podríais hacer una cosa más rocambolesca, que es que el mínimo de la X y el máximo
de la X no fuera el mismo número porque la cámara no está en medio, en cuyo caso necesitaría dos valores
la X mínima y la X máxima.
No lo haríamos con dos variables, sino que lo haríamos con un vector 2 y este vector 2.
No, la agois sería ni un vector 2.
Pues imagínate, el mínimo está en menos 15 y el máximo está en 10.
Por qué?
Porque no he puesto la cámara centrada.
Esta sería la forma de hacerlo correcto.
Y ahora el vector X Rains tendría dos valores.
En X Rains podría consultarle la X y la veis?
Si, pero esto ya os digo, esto es, si quisierais aglutinar o no en una variable float, sino en un
vector de dos coordenadas.
Vale, lo digo porque siempre hay alguno que se le ocurren estas cosas.
Si habéis puesto la cámara en el centro, todo esto no hace falta.
Basta que sea un único número, un float.
Aquí le damos el valor 15 y ya está.
Pero que sepáis que si no fuera uniforme o quisierais un valor en la X y otro si no me quereis dos variables,
crear un vector que las aglutine será el punto X, el otro punto o lo que sea.
Vale, entonces en este caso es relativamente sencillo porque sólo tenéis que bajar aquí al código y
donde había un 15.
De hecho, menos 15 ponéis x rains.
Menos Reintsch y donde había un 15 ponéis X Ranks X y X Rains aquí abajo ya lo tenéis.
parametrizada y de hecho, para que podáis probar basta que guardáis.
Nos vamos al editor de Unity y le damos al play.
En teoría se había puesto el mismo número de antes.
Sostiene que mover igual hasta al menos 15 15.
Pero ahora la ventaja es que si te vas al jugador y dices que el X Reigns no es 15, sino que es 8.
Fijaros hasta dónde se mueve el granjero.
Le habéis reducido el cambio.
Sin embargo, si no lo ponéis con una variable, luego es un coñazo detectar en el código dónde hay
que cambiar una cosa u otra.
Es muy pesado encontrarlo, mientras que con una variables es gratis.
Vienes aquí, cambias el valor, juegas con ello y listo.
Por lo tanto, fijaros, ya podéis mover al personaje a izquierdas y derechas basándose en las flechas
o en la isla de recordad que se utiliza el axis horizontal.
Tanto vale las flechas como la águila y el jugador ya no se nos escapa de la pantalla.
Y sobre todo, habéis visto que para que la escala sea la adecuada he tenido que aumentar, por ejemplo,
el tamaño de la pizza, que era muy pequeña.
Entonces hemos podido jugar un poco con los factores de escala, aunque ya os digo que no es lo más
normal jugar con ellos, porque aquí, de hecho se debería apreciar un poco.
Si ves que la pizza no sé si se ve, si aparece con los bordes cerrados, vale, esto ya es indicativo
de aliasing y es muy malo todo lo que se escala.
En general es capaz de crear unos artefactos extraños que realmente no están ahí, pero que el propio
proceso de escalado por la técnica que utiliza los crea artificialmente.
El efecto más bestia es este de aquí.
A ver
si.
A ver si somos capaces de verlo.
Ves que este y este dan lugar a efectos diferentes en las tejas.
No sé si se ve que esto se ve fatal.
Aquí aquí se ve perfecta.
En este se ve.
Si fijaros que aquí las propias cejas se ven fatal, eran como una especie de líneas que el ojo humano
las ve, a pesar de que la imagen real no las tiene.
Entonces en este no han aplicado ningún filtro antialiasing y el efecto es que los propios ladrillos.
El efecto óptico es que están alineados en forma de cruz.
Cuando realmente tú miras aquí no hay ningún efecto.
Entonces esto los filtros aliá antialiasing se suelen aplicar un montón para evitar este tipo de artefactos
extraños que ocurren debido a transformaciones que básicamente son el cambio de escala o una transformada
de Fourier o alguna cosa de estas que los genera dinámicamente.
Entonces, teniendo en cuenta que a la hora de recrear efectos miracles se nota un montón.
Hasta lo veréis.
Vosotros veis que aparecen como semicírculos.
Esos semicírculos no están ahí.
Vosotros lo veis en la vida real y esos semicírculos o esas rayitas que tienen estos silos, eso no
está ahí, ni siquiera es efecto de la luz.
La luz no hace efectos de parábola porque la luz está en el infinito.
Que esté en medio metro, más palante o patrás se la trae al pairo.
Estos son efectos que ocurren cuando se digitaliza, cuando se transforma en pixel, se rasterización
cualquier imagen, cualquier efecto visual y se acentúa muchísimo con los escalados o con las transformaciones
no lineales en particular.
Aquí me he cargado la Picsi, como ha hecho Echo Zoom.
Ves que el propio cuadradito este que define el peperoni o lo que sea, tiene un borde cerrado.
Eso es lo que produce un aliasing cuando escalas un objeto.
Por eso es importante que os pongáis de acuerdo con el artista que tiene que hacer el gráfico para que
os lo desde la dimensión correcta.
Porque si la dimensión no es la correcta, vais a experimentar esto.
Originalmente la imagen era así, donde el efecto de aliasing es mucho menos notable que a medida que
escala es.
De hecho, cuando veis a escala que escala o por Dios escala el suelo, de hecho no se que hecho.
Si la pizza lo que quería escalar 1 1 y ahora esto sería la pizza tamaño original, que el borde cerrado
se nota un pelín ya porque es un efecto pixelado.
Pero cuando hago zoom, que no se nota tanto porque el tamaño original.
Sin embargo, a la que esto ya no es del tamaño adecuado, esto ya es de un tamaño totalmente diferente.
Lo incrementado incrementa considerablemente las posibilidades del aliasing.
Vale, vale, perfecto.
Incluso hay una última cosa que podríais hacer.
No lo haremos ahora, pero a la que empezáis a notar que vuestro código se repite sospechosamente.
Vale, cuando tenés que escribir lo mismo dos veces o tres veces, significa que aquí hay potencial
fuente de errores y que si este código estuviera mal, el otro que se parece sospechosamente también
vas tan mal.
Entonces, muchas veces lo que solemos hacer es encapsular, aglutinar todo el comportamiento que se
parece el uno y el otro en una función que se pueda encargar de ello y que repita el código, o sea
que el código está repetido, esté solo en un lugar y llamemos a una función o a otra.
Eso lo haremos más adelante.
Ya sé que vosotros lo habéis visto en el otro curso, pero lo haremos más adelante que cuando necesitemos
repetir lo mismo una vez o dos, o tres o cincuenta.
Es mejor ese código repetido que esté en otra función separada, que esté en un phablet.
No lo copiamos.
Public Bobbit Checking bounds.
Que compruebe si está dentro de los márgenes y fijaros que es lo único que cambia de aquí, aquí el
signo del signo es uno menos uno.
Entonces yo aquí le pongo sin signo, me llevo toda esta cosa aquí dentro.
Lo que multiplica por uno o por menos uno es esta cosa que tengo aquí.
Correcto.
Entonces lo único que hago es multiplico xauen por X Rains aquí y por X Rains aquí abajo.
El resultado en lugar de hacer dos llamadas, me basta hacer dos líneas checking bounds con el signo
1 para chequear a derechas, checking bounds con el signo menos 1 para chequear la izquierda.
Entonces fijaros que el gordo ya solo lo hago en un lado y lo que hago es llamar a las funciones con
el signo en 1 o menos 1 para que se encargue de multiplicarlo por el X20.
Ya os digo, no lo hagáis ahora, no lo hagáis, pero la idea es que siempre que veáis que en algún
sitio hay posibilidades de reutilizar vuestro código, es mucho mejor crear una función y que esa función
sea la que se encargue de juntar la lógica.
Esto significa que ganáis en abstracción, ganáis en abstracción porque tenéis un proceso más abstracto
que es capaz de realizar una única función.
Esta función tiene derecha e izquierda implementado.
La otra es más concreta porque las dos otras las tenía por aquí.
Estas dos son la izquierda en un lado y la derecha en otro, y de hecho hasta lo podéis documentar izquierdas,
una derechas la otra.
Al ganar en abstracción, pues perdéis lo que era tan concreto.
Perdáis la noción de izquierdas o derechas y eso lo tiene que ganar la variable que entra por parametro
y esto poco a poco lo iremos practicando.
Pero como para algunos es la primera vez que programas y demás, de momento lo podemos dejar así y lo
que mejor funciona?
Vale, pues básicamente sólo tenemos el movimiento del granjero.
Vamos a implementar la siguiente mecánica, que es la de tirarle comida a los animales.
Hay que darle de comer, les vamos a tirar un cacho de pizza de que se coman en el caso de pizza a la
vaca, el perro y demás.