WEBVTT
00:00:00.387 --> 00:00:04.096
Continuemos explorando o que
podemos fazer com objetos.
00:00:04.109 --> 00:00:08.305
Voltamos para o programa que
usamos no tutorial de funções.
00:00:08.305 --> 00:00:14.343
Este programa tem esta função drawWinston
que sabe desenhar Winston em certo X e Y.
00:00:14.521 --> 00:00:16.441
E, aqui, chamamos drawWinston
00:00:16.441 --> 00:00:18.361
4 vezes, cada uma com um conjunto
00:00:18.361 --> 00:00:21.521
diferente de coordenadas X e Y.
00:00:21.521 --> 00:00:23.776
Bem, você me conhece, quando vejo
00:00:23.776 --> 00:00:28.379
estas quatro chamadas para drawWinton
que se parecem tanto,
00:00:28.379 --> 00:00:31.779
tudo que penso é: como seria
melhor se pudéssemos
00:00:31.779 --> 00:00:36.329
usar um loop e chamá-la apenas
uma vez dentro do loop,
00:00:36.329 --> 00:00:40.369
mudando X e Y em cada interação do loop.
00:00:40.369 --> 00:00:47.036
Para isso, precisamos guardar esses X e Y
em um vetor para poder iterá-lo.
00:00:47.036 --> 00:00:50.200
Bem, temos dois conjuntos de valores.
00:00:50.200 --> 00:00:56.524
Então, poderíamos ter 2 vetores. Um para
a posição X e outro para a posição Y.
00:00:56.524 --> 00:01:02.805
Nas posições X podemos ter
99, 294, 101 e 294,
00:01:02.805 --> 00:01:09.946
e nas posições Y teremos
117, 117, 316, 316.
00:01:09.946 --> 00:01:17.979
Ok, e agora podemos iterá-los com nosso loop
for var i = 0; i < xPositions.length; i++
00:01:17.979 --> 00:01:22.174
Para cada elemento de
xPositions, dizemos
00:01:22.174 --> 00:01:30.019
drawWinston ( xPositions[ i ],
yPositions [ i ] );
00:01:30.019 --> 00:01:33.926
Ok, vejamos se funciona...
deletando...
00:01:33.926 --> 00:01:36.200
Certo, funcionou!
00:01:36.200 --> 00:01:40.459
Agora podemos apenas chamar
essa única linha de código que
00:01:40.459 --> 00:01:45.518
executa drawWinston, mas o faz
para cada posição do vetor xPositions.
00:01:45.518 --> 00:01:48.396
Podemos vir aqui e adicionar
mais a isso ... dizendo...
00:01:48.396 --> 00:01:57.874
tipo 10, então adicionamos 1, e então 1,
e então 1, e então 100, e 1.
00:01:57.874 --> 00:02:03.472
Agora... agora está ficando um pouco
confuso e não estou gostando,
00:02:03.472 --> 00:02:09.914
porque está bem difícil ver que X
se relaciona com qual Y.
00:02:09.914 --> 00:02:15.559
Eu quero poder apenas bater o olho e
saber quais são os pares X e Y,
00:02:15.559 --> 00:02:22.454
ao invés de ter que garantir que os estou
alinhando corretamente, um sobre o outro
00:02:22.454 --> 00:02:26.729
Preciso encontrar uma forma diferente
de armazenar essas posições.
00:02:26.729 --> 00:02:30.791
Uma ideia é que poderíamos
armazená-las como objetos.
00:02:30.791 --> 00:02:35.780
Pense nisso, cada posição é na verdade
duas informações: o X e o Y.
00:02:35.780 --> 00:02:39.106
Então, poderíamos ter um objeto com as
propriedades X e Y,
00:02:39.106 --> 00:02:44.002
e poderíamos ter um vetor -de objetos
com todas essas posições X-Y.
00:02:44.002 --> 00:02:45.968
Vamos fazer!
00:02:45.968 --> 00:02:51.395
Vamos dizer var positions
igual a um vetor.
00:02:51.395 --> 00:02:55.852
Mas, cada elemento, ao invés de ser
um número, será um objeto.
00:02:55.852 --> 00:03:04.691
Aqui abrimos chave e vamos apenas
dizer X:99, Y:117.
00:03:04.691 --> 00:03:13.392
Ok, temos agora nossas posições aqui,
e vamos adicionar outra aqui.
00:03:13.392 --> 00:03:32.877
Certo, X deve ser 294, 117, e o terceiro
será 101, 316, e o último é 294 e 316.
00:03:32.877 --> 00:03:37.524
Ok! Agora, temos um vetor de objetos onde
cada objeto tem propriedades X e Y.
00:03:37.524 --> 00:03:44.228
Aqui em baixo, no loop for, mudamos apenas
isso aqui para iterar por positions.length
00:03:44.228 --> 00:03:48.993
Então passamos o objeto.
00:03:48.993 --> 00:03:53.238
Agora estamos passando o objeto inteiro,
mas queremos passar o X e o Y,
00:03:53.238 --> 00:03:59.548
então precisamos de
positions [ i ].X e positions [ i ].Y
00:03:59.548 --> 00:04:00.808
Ta-da!
00:04:00.808 --> 00:04:04.999
Agora podemos nos livrar destes
vetores antigos confusos.
00:04:04.999 --> 00:04:10.034
Ótimo, parece-me bem melhor e
torna o código mais legível
00:04:10.034 --> 00:04:12.959
e sempre que pudermos ter código
mais legível, melhor.
00:04:12.959 --> 00:04:14.956
E também está mais fácil adicionar.
00:04:14.956 --> 00:04:19.204
Se quisermos adicionar um, só precisamos
adicionar o par junto,
00:04:19.204 --> 00:04:25.142
e aí podemos dizer X é 200, Y 200, nos dá um
pequeno Winston aqui no meio.
00:04:26.872 --> 00:04:27.961
Beleza.
00:04:27.961 --> 00:04:31.266
Agora quero mostrar algo
ainda mais sofisticado.
00:04:31.266 --> 00:04:38.635
Percebe que nossa função aceita dois
números e depois os usa.
00:04:38.635 --> 00:04:42.166
Bem, poderíamos mudar nossa função
para que espere um objeto
00:04:42.166 --> 00:04:45.697
e depois pegue o X e Y do objeto,
00:04:45.697 --> 00:04:49.230
o que significa que aqui embaixo só
teríamos que passar o objeto.
00:04:50.060 --> 00:04:50.846
Vamos tentar!
00:04:50.846 --> 00:04:53.596
Passamos o objeto, agora não funciona.
00:04:53.596 --> 00:04:58.208
Isso porque nossa função ainda espera dois
objetos e está recebendo apenas um,
00:04:59.278 --> 00:05:00.050
então vamos mudá-la
00:05:00.050 --> 00:05:02.370
para dizer que recebe facePosition,
00:05:04.220 --> 00:05:06.710
e agora deu erro porque faceX
não está definido,
00:05:06.710 --> 00:05:12.196
por que antes estávamos passando faceX
como argumento, mas agora ele não existe,
00:05:12.196 --> 00:05:12.862
temos apenas um objeto.
00:05:12.862 --> 00:05:21.159
O que podemos fazer, é salvar a posição X
de um objeto dentro da variável faceX.
00:05:21.159 --> 00:05:24.945
Estamos dizendo que temos este objeto,
sabemos que ele tem uma propriedade X,
00:05:24.945 --> 00:05:28.271
então vamos apenas guardá-la
na variável faceX.
00:05:28.871 --> 00:05:33.637
Podemos fazer o mesmo com Y,
então faceY = facePosition.y;
00:05:33.637 --> 00:05:34.850
Ta-da!
00:05:34.850 --> 00:05:38.167
E então, o resto da função usa
faceX e faceY.
00:05:38.167 --> 00:05:40.146
Agora, temos que ter certeza
que soletramos corretamente,
00:05:40.146 --> 00:05:44.805
se escrevermos xx, não vai funcionar,
porque não é o que está aqui embaixo
00:05:44.805 --> 00:05:48.125
no nosso vetor de objetos. Precisa bater.
00:05:48.125 --> 00:05:52.136
Isso é bem legal, porque agora você pode
ter um vetor de objetos,
00:05:52.136 --> 00:05:54.117
pode ter funções que recebem objetos
00:05:54.117 --> 00:06:00.160
e você vai ver que seus programas ficarão
poderosos com essa estrutura de dados.
00:06:00.160 --> 00:06:04.434
Especialmente porque é tão comum querer
junto um par X e Y.
00:06:04.434 --> 00:06:08.926
Será especialmente útil nos seus programas
de desenho e animação aqui.
00:06:08.926 --> 00:06:10.869
Então, vá fundo e se divirta!
00:06:10.869 --> 00:06:15.589
[Legendado por: Fred Guth] [Revisado por: Alef Almeida]