Ce que fait "For each"
"For each" (Pour chaque) fait jouer une boucle contenant toutes les conditions et les actions après celui-ci pour chaque instance de l'objet spécifié, choisissant qu'une seule de ces instances à la fois.
for each sprite
- rotate 5 degrees
*pour chaque sprite
- faire rotation de 5 degrés*
Supposons qu'il y a 10 instances d'un sprite pour ce tutoriel. Ce qui se passe : Construct choisi un des sprites, oublie les autres, puis exécute les actions. Puisqu'il y a 10 sprites, les actions sont effectuées 10 fois, mais comme Construct ne choisit qu'un seul des sprites à chaque fois, tous les sprites n'ont qu'une rotation de 5 degrés.
L'événement ci-dessus est un exemple de quand NE PAS utiliser "For each", parce que vous obtiendrez le même effet que si vous supprimez la condition "For each". Ce serait plus rapide et plus efficace ainsi puisque Construct les ferait tous tourner à la fois, au lieu d'un à un séparément. Voici un exemple de cas où vous voudriez utiliser "For each".
for each sprite
- Create object "selectioncircle" at sprite.X, sprite.Y
*pour chaque sprite
- Créer objet "selectioncircle" à sprite.X, sprite.Y*
Dans cet exemple, Construct va exécuter les actions une fois pour chaque sprite. De cette façon, Construct crée un cercle de sélection pour chaque sprite, et puisqu'un seul sprite est sur la liste de l'objet sélectionné lors de l'exécution de la boucle, il sait aussi où placer le cercle de sélection lors de l'utilisation de sprite.X et sprite.Y. Le résultat est 10 cercles de sélection créés, chacun à l'emplacement d'un sprite.
Si vous n'avez pas utilisé "For each" dans l'exemple ci-dessus, il choisirait tous les sprites, créerait un cercle de sélection et le placerait à un sprite.
Ce que fait "For each loops"
Construct exécute non seulement les événements pour chaque sprites sélectionnés dans la boucle "For each", mais il vérifie également les conditions après la condition "For each" de chaque objet. Ici, je montre le nombre de fois que Construct exécute chaque condition et action.
For each sprite - 1
if sprite is visible - 10
- actions - 10
*Pour chaque sprite - 1
si sprite est visible - 10
- actions - 10*
Dans cet exemple, Construct vérifie si chaque sprite est visible, un par un. C'est moins efficace que tous vérifier à la fois, ce que Construct fait si vous placez la condition "if sprite is visible" avant la condition "For each" comme ci dessous.
if sprite is visible - 1
For each sprite - 1
- actions - 10
*si sprite est visible - 1
Pour chaque sprite - 1
- actions - 10*
Un autre avantage de mettre la condition de si sprite est visible avant la condition "For each" est que cela réduit le nombre de boucles exécutées par la condition "For each" au nombre minimal requis. S'il y a 5 sprites de visibles, l'événement ci-dessus exécuterait autant de fois :
if sprite is visible - 1
For each sprite - 1
- actions - 5
*si sprite est visible - 1
Pour chaque sprite - 1
- actions - 5*
"For each" est utile si vous devez exécuter les actions une fois à chaque fois pour chaque objet, mais ne devrait pas être utilisé lorsque vous pouvez faire toutes les actions à la fois.
À noter également que les sous-événements d'un événement avec la condition "For each" seront effectués pour chaque instance de la boucle "For each".
"For each" est souvent inutile pour régler les valeurs d'instances
Un autre exemple quand ne pas l'utiliser :
for each sprite
- set sprite instance variable to sprite.x
*pour chaque sprite
- régler variable d'instance à sprite.x*
Si vous configurez une variable d'instance, vous n'avez généralement pas besoin d'utiliser "For each", même si le résultat sera différent pour chaque sprite. Dans l'exemple ci-dessus, même sans la condition "For each", régler la variable d'instance du sprite à sprite.x aura comme résultat dans chaque sprite ayant cette variable d'instance de régler à sa propre position x.
Placement automatique d'instances
Dans cet exemple :
for each sprite
if selectioncircle value 'spriteuid' is equal to sprite.UID
- set selectioncircle position to sprite.X, sprite.Y
*pour chaque sprite
si la valeur "spriteuid" de selectioncircle est égale à sprite.UID
- régler la position de selection circle à sprite.X, sprite.Y*
Construct choisira un sprite à chaque boucle, vérifiera tous les selectioncircle pour si leur variable privée est à l'UID du sprite, puis réglera la position de ce selectioncircle. Cependant, c'est en fait un autre exemple qui peut être inutile, puisque Construct a une autre boucle automatique qui peut être pratique.
Si vous avez l'action :
Set selectioncircle position to sprite.x, sprite.y
Régler la position de selectioncircle à sprite.X, sprit)e.Y
Construct, sans une condition "For each", va automatiquement placer chaque instance de selectioncircle à une autre instance de sprite, au lieu de toutes les instances de selectioncircle à une instance de sprite. Cela peut être très utile pour placer des sprites qui ne nécessitent pas une instance spécifique, tels que les barres de santé, des ombres ou des anneaux de sélection.
En résumé
"For each" exécutera toutes les conditions, actions et sous-événements après pour le nombre de fois égal au nombre d'instances choisies, choisissant une de ces instances à chaque fois.