[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.39,0:00:04.10,Default,,0000,0000,0000,,Continuemos explorando o que \Npodemos fazer com objetos. Dialogue: 0,0:00:04.11,0:00:08.30,Default,,0000,0000,0000,,Voltamos para o programa que\Nusamos no tutorial de funções. Dialogue: 0,0:00:08.30,0:00:14.34,Default,,0000,0000,0000,,Este programa tem esta função {\i1}drawWinston{\i0}\Nque sabe desenhar Winston em certo X e Y. Dialogue: 0,0:00:14.52,0:00:16.44,Default,,0000,0000,0000,,E, aqui, chamamos {\i1}drawWinston{\i0}\N Dialogue: 0,0:00:16.44,0:00:18.36,Default,,0000,0000,0000,,4 vezes, cada uma com um conjunto Dialogue: 0,0:00:18.36,0:00:21.52,Default,,0000,0000,0000,,diferente de coordenadas X e Y. Dialogue: 0,0:00:21.52,0:00:23.78,Default,,0000,0000,0000,,Bem, você me conhece, quando vejo Dialogue: 0,0:00:23.78,0:00:28.38,Default,,0000,0000,0000,,estas quatro chamadas para {\i1}drawWinton{\i0}\Nque se parecem tanto, Dialogue: 0,0:00:28.38,0:00:31.78,Default,,0000,0000,0000,,tudo que penso é: como seria\Nmelhor se pudéssemos Dialogue: 0,0:00:31.78,0:00:36.33,Default,,0000,0000,0000,,usar um loop e chamá-la apenas \Numa vez dentro do loop, Dialogue: 0,0:00:36.33,0:00:40.37,Default,,0000,0000,0000,,mudando X e Y em cada interação do loop. Dialogue: 0,0:00:40.37,0:00:47.04,Default,,0000,0000,0000,,Para isso, precisamos guardar esses X e Y\Nem um vetor para poder iterá-lo. Dialogue: 0,0:00:47.04,0:00:50.20,Default,,0000,0000,0000,,Bem, temos dois conjuntos de valores. Dialogue: 0,0:00:50.20,0:00:56.52,Default,,0000,0000,0000,,Então, poderíamos ter 2 vetores. Um para\Na posição X e outro para a posição Y. Dialogue: 0,0:00:56.52,0:01:02.80,Default,,0000,0000,0000,,Nas posições X podemos ter \N99, 294, 101 e 294, Dialogue: 0,0:01:02.80,0:01:09.95,Default,,0000,0000,0000,,e nas posições Y teremos\N117, 117, 316, 316. Dialogue: 0,0:01:09.95,0:01:17.98,Default,,0000,0000,0000,,Ok, e agora podemos iterá-los com nosso loop\Nfor var i = 0; i < xPositions.length; i++ Dialogue: 0,0:01:17.98,0:01:22.17,Default,,0000,0000,0000,,Para cada elemento de\NxPositions, dizemos Dialogue: 0,0:01:22.17,0:01:30.02,Default,,0000,0000,0000,,drawWinston ( xPositions[ i ],\NyPositions [ i ] ); Dialogue: 0,0:01:30.02,0:01:33.93,Default,,0000,0000,0000,,Ok, vejamos se funciona...\Ndeletando... Dialogue: 0,0:01:33.93,0:01:36.20,Default,,0000,0000,0000,,Certo, funcionou! Dialogue: 0,0:01:36.20,0:01:40.46,Default,,0000,0000,0000,,Agora podemos apenas chamar \Nessa única linha de código que Dialogue: 0,0:01:40.46,0:01:45.52,Default,,0000,0000,0000,,executa drawWinston, mas o faz\Npara cada posição do vetor xPositions. Dialogue: 0,0:01:45.52,0:01:48.40,Default,,0000,0000,0000,,Podemos vir aqui e adicionar \Nmais a isso ... dizendo... Dialogue: 0,0:01:48.40,0:01:57.87,Default,,0000,0000,0000,,tipo 10, então adicionamos 1, e então 1, \Ne então 1, e então 100, e 1. Dialogue: 0,0:01:57.87,0:02:03.47,Default,,0000,0000,0000,,Agora... agora está ficando um pouco\Nconfuso e não estou gostando, Dialogue: 0,0:02:03.47,0:02:09.91,Default,,0000,0000,0000,,porque está bem difícil ver que X\Nse relaciona com qual Y. Dialogue: 0,0:02:09.91,0:02:15.56,Default,,0000,0000,0000,,Eu quero poder apenas bater o olho e\Nsaber quais são os pares X e Y, Dialogue: 0,0:02:15.56,0:02:22.45,Default,,0000,0000,0000,,ao invés de ter que garantir que os estou\Nalinhando corretamente, um sobre o outro Dialogue: 0,0:02:22.45,0:02:26.73,Default,,0000,0000,0000,,Preciso encontrar uma forma diferente\Nde armazenar essas posições. Dialogue: 0,0:02:26.73,0:02:30.79,Default,,0000,0000,0000,,Uma ideia é que poderíamos \Narmazená-las como objetos. Dialogue: 0,0:02:30.79,0:02:35.78,Default,,0000,0000,0000,,Pense nisso, cada posição é na verdade\Nduas informações: o X e o Y. Dialogue: 0,0:02:35.78,0:02:39.11,Default,,0000,0000,0000,,Então, poderíamos ter um objeto com as\Npropriedades X e Y, Dialogue: 0,0:02:39.11,0:02:44.00,Default,,0000,0000,0000,,e poderíamos ter um vetor -de objetos\Ncom todas essas posições X-Y. Dialogue: 0,0:02:44.00,0:02:45.97,Default,,0000,0000,0000,,Vamos fazer! Dialogue: 0,0:02:45.97,0:02:51.40,Default,,0000,0000,0000,,Vamos dizer var positions\Nigual a um vetor. Dialogue: 0,0:02:51.40,0:02:55.85,Default,,0000,0000,0000,,Mas, cada elemento, ao invés de ser\Num número, será um objeto. Dialogue: 0,0:02:55.85,0:03:04.69,Default,,0000,0000,0000,,Aqui abrimos chave e vamos apenas\Ndizer X:99, Y:117. Dialogue: 0,0:03:04.69,0:03:13.39,Default,,0000,0000,0000,,Ok, temos agora nossas posições aqui, \Ne vamos adicionar outra aqui. Dialogue: 0,0:03:13.39,0:03:32.88,Default,,0000,0000,0000,,Certo, X deve ser 294, 117, e o terceiro\Nserá 101, 316, e o último é 294 e 316. Dialogue: 0,0:03:32.88,0:03:37.52,Default,,0000,0000,0000,,Ok! Agora, temos um vetor de objetos onde\Ncada objeto tem propriedades X e Y. Dialogue: 0,0:03:37.52,0:03:44.23,Default,,0000,0000,0000,,Aqui em baixo, no loop for, mudamos apenas\Nisso aqui para iterar por positions.length Dialogue: 0,0:03:44.23,0:03:48.99,Default,,0000,0000,0000,,Então passamos o objeto. Dialogue: 0,0:03:48.99,0:03:53.24,Default,,0000,0000,0000,,Agora estamos passando o objeto inteiro,\Nmas queremos passar o X e o Y, Dialogue: 0,0:03:53.24,0:03:59.55,Default,,0000,0000,0000,,então precisamos de \Npositions [ i ].X e positions [ i ].Y Dialogue: 0,0:03:59.55,0:04:00.81,Default,,0000,0000,0000,,Ta-da! Dialogue: 0,0:04:00.81,0:04:04.100,Default,,0000,0000,0000,,Agora podemos nos livrar destes\Nvetores antigos confusos. Dialogue: 0,0:04:04.100,0:04:10.03,Default,,0000,0000,0000,,Ótimo, parece-me bem melhor e\Ntorna o código mais legível Dialogue: 0,0:04:10.03,0:04:12.96,Default,,0000,0000,0000,,e sempre que pudermos ter código\Nmais legível, melhor. Dialogue: 0,0:04:12.96,0:04:14.96,Default,,0000,0000,0000,,E também está mais fácil adicionar. Dialogue: 0,0:04:14.96,0:04:19.20,Default,,0000,0000,0000,,Se quisermos adicionar um, só precisamos\Nadicionar o par junto, Dialogue: 0,0:04:19.20,0:04:25.14,Default,,0000,0000,0000,,e aí podemos dizer X é 200, Y 200, nos dá um\Npequeno Winston aqui no meio. Dialogue: 0,0:04:26.87,0:04:27.96,Default,,0000,0000,0000,,Beleza. Dialogue: 0,0:04:27.96,0:04:31.27,Default,,0000,0000,0000,,Agora quero mostrar algo\Nainda mais sofisticado. Dialogue: 0,0:04:31.27,0:04:38.64,Default,,0000,0000,0000,,Percebe que nossa função aceita dois\Nnúmeros e depois os usa. Dialogue: 0,0:04:38.64,0:04:42.17,Default,,0000,0000,0000,,Bem, poderíamos mudar nossa função\Npara que espere um objeto Dialogue: 0,0:04:42.17,0:04:45.70,Default,,0000,0000,0000,,e depois pegue o X e Y do objeto, Dialogue: 0,0:04:45.70,0:04:49.23,Default,,0000,0000,0000,,o que significa que aqui embaixo só\Nteríamos que passar o objeto. Dialogue: 0,0:04:50.06,0:04:50.85,Default,,0000,0000,0000,,Vamos tentar! Dialogue: 0,0:04:50.85,0:04:53.60,Default,,0000,0000,0000,,Passamos o objeto, agora não funciona. Dialogue: 0,0:04:53.60,0:04:58.21,Default,,0000,0000,0000,,Isso porque nossa função ainda espera dois\Nobjetos e está recebendo apenas um, Dialogue: 0,0:04:59.28,0:05:00.05,Default,,0000,0000,0000,,então vamos mudá-la Dialogue: 0,0:05:00.05,0:05:02.37,Default,,0000,0000,0000,,para dizer que recebe facePosition,\N Dialogue: 0,0:05:04.22,0:05:06.71,Default,,0000,0000,0000,,e agora deu erro porque faceX\Nnão está definido, Dialogue: 0,0:05:06.71,0:05:12.20,Default,,0000,0000,0000,,por que antes estávamos passando faceX\Ncomo argumento, mas agora ele não existe, Dialogue: 0,0:05:12.20,0:05:12.86,Default,,0000,0000,0000,,temos apenas um objeto. Dialogue: 0,0:05:12.86,0:05:21.16,Default,,0000,0000,0000,,O que podemos fazer, é salvar a posição X\Nde um objeto dentro da variável faceX. Dialogue: 0,0:05:21.16,0:05:24.94,Default,,0000,0000,0000,,Estamos dizendo que temos este objeto,\Nsabemos que ele tem uma propriedade X, Dialogue: 0,0:05:24.94,0:05:28.27,Default,,0000,0000,0000,,então vamos apenas guardá-la\Nna variável faceX. Dialogue: 0,0:05:28.87,0:05:33.64,Default,,0000,0000,0000,,Podemos fazer o mesmo com Y, \Nentão faceY = facePosition.y; Dialogue: 0,0:05:33.64,0:05:34.85,Default,,0000,0000,0000,,Ta-da! Dialogue: 0,0:05:34.85,0:05:38.17,Default,,0000,0000,0000,,E então, o resto da função usa\NfaceX e faceY. Dialogue: 0,0:05:38.17,0:05:40.15,Default,,0000,0000,0000,,Agora, temos que ter certeza\Nque soletramos corretamente, Dialogue: 0,0:05:40.15,0:05:44.80,Default,,0000,0000,0000,,se escrevermos xx, não vai funcionar,\Nporque não é o que está aqui embaixo Dialogue: 0,0:05:44.80,0:05:48.12,Default,,0000,0000,0000,,no nosso vetor de objetos. Precisa bater. Dialogue: 0,0:05:48.12,0:05:52.14,Default,,0000,0000,0000,,Isso é bem legal, porque agora você pode\Nter um vetor de objetos, Dialogue: 0,0:05:52.14,0:05:54.12,Default,,0000,0000,0000,,pode ter funções que recebem objetos Dialogue: 0,0:05:54.12,0:06:00.16,Default,,0000,0000,0000,,e você vai ver que seus programas ficarão \Npoderosos com essa estrutura de dados. Dialogue: 0,0:06:00.16,0:06:04.43,Default,,0000,0000,0000,,Especialmente porque é tão comum querer\Njunto um par X e Y. Dialogue: 0,0:06:04.43,0:06:08.93,Default,,0000,0000,0000,,Será especialmente útil nos seus programas\Nde desenho e animação aqui. Dialogue: 0,0:06:08.93,0:06:10.87,Default,,0000,0000,0000,,Então, vá fundo e se divirta! Dialogue: 0,0:06:10.87,0:06:15.59,Default,,0000,0000,0000,,[Legendado por: Fred Guth] [Revisado por: Alef Almeida]