O QUE O 'FOR EACH' FAZ
O 'for each' executará um loop contendo todas as condições e ações que o seguem para cada instância do objeto especificado, selecionando apenas uma dessas instâncias a cada vez.
para cada sprite
girar 5 graus
Vamos supor que existam 10 instâncias de um sprite para este tutorial. O que acontece aqui é que o Construct seleciona um dos sprites, esquece os outros e, em seguida, executa as ações. Como existem 10 sprites, as ações são executadas 10 vezes, mas, como o Construct seleciona apenas um dos sprites a cada vez, todos os sprites são apenas girados 5 graus.
O evento acima é um exemplo de quando NÃO usar o 'for each', porque você obteria o mesmo efeito se excluísse a condição 'for each sprite', e também seria mais rápido e eficiente, pois o Construct os giraria todos de uma vez, em vez de um por um individualmente. Aqui está um exemplo de quando você gostaria de usar o 'for each'.
para cada sprite
Criar objeto "circleselecao" em sprite.X, sprite.Y
Neste exemplo, o Construct executará as ações uma vez para cada sprite. Dessa forma, o Construct cria um círculo de seleção para cada sprite e, como apenas um sprite está na lista de objetos selecionados quando ele executa o loop, ele também sabe onde colocar o círculo de seleção ao usar sprite.X e sprite.Y. O resultado é a criação de 10 círculos de seleção, cada um em uma posição de sprite diferente.
Se você não usasse o 'for each sprite' no exemplo acima, ele escolheria todos os sprites, criaria um único círculo de seleção e o colocaria em um sprite.
COMO FUNCIONAM OS LOOPS DO 'FOR EACH'
O Construct não apenas executa os eventos para cada sprite selecionado no loop 'for each', mas também verifica todas as condições após a condição 'for each' para cada objeto. Aqui, mostro o número de vezes que o Construct executa cada condição e ação.
Para cada sprite - 1
se o sprite estiver visível - 10
ações - 10
Neste exemplo, o Construct verifica se cada sprite está visível um por um. Isso é menos eficiente do que verificar todos de uma vez, o que o Construct faz se você colocar a condição "se o sprite estiver visível" antes da condição 'for each', assim:
se o sprite estiver visível - 1
Para cada sprite - 1
ações - 10
Outra vantagem de colocar a condição "se o sprite estiver visível" antes da condição 'for each' é que ela reduz o número de loops executados pela condição 'for each' para o número mínimo necessário. Se houver 5 sprites visíveis, então o evento acima seria executado dessa forma:
se o sprite estiver visível - 1
Para cada sprite - 1
ações - 5
O 'for each' é útil se você precisa executar as ações uma vez para cada objeto, mas não deve ser usado quando você pode executar todas as ações de uma vez.
Também observe que quaisquer subeventos de um evento com uma condição 'for each' serão executados para cada instância do loop 'for each'.
O 'FOR EACH' É FREQUENTEMENTE DESNECESSÁRIO PARA DEFINIR VALORES DE INSTÂNCIA
Outro exemplo de quando não usá-lo:
para cada sprite
definir variável de instância do sprite para sprite.x
Se você estiver definindo uma variável de instância, geralmente não precisa usar o 'for each', mesmo que o resultado seja diferente para cada sprite. No exemplo acima, mesmo sem a condição 'for each', definir a variável de instância do sprite.x resultará em cada sprite tendo sua variável de instância definida como sua própria posição em X.
COLOCAÇÃO AUTOMÁTICA DE INSTÂNCIAS
Neste exemplo:
para cada sprite
se o valor 'spriteuid' do círculo de seleção for igual a sprite.UID
definir a posição do círculo de seleção como sprite.X, sprite.Y
O Construct escolherá um sprite a cada loop, verificará se todos os círculos de seleção têm sua variável privada definida como o UID do sprite e, em seguida, definirá a posição desse círculo de seleção. No entanto, este é realmente outro exemplo que pode ser desnecessário, pois o Construct possui outro loop automático que pode ser útil.
Se você tiver a ação:
Definir a posição do círculo de seleção como sprite.x, sprite.y
O Construct, sem uma condição 'for each', colocará automaticamente cada instância de círculo de seleção em outra instância de sprite, em vez de todas as instâncias de círculo de seleção em uma única instância de sprite. Isso pode ser muito útil para colocar sprites que não requerem uma instância específica, como barras de vida, sombras ou anéis de seleção.
EM RESUMO
O 'for each' executará todas as condições, ações e subeventos após ele um número de vezes igual ao número de instâncias selecionadas, escolhendo uma dessas instâncias a cada vez.