Bonjour
Pierrec,
Tout d'abord je suis ravi de voir qu'on va bientôt pouvoir mettre la main sur une nouvelle création à toi ! Et d'après ton bref descriptif, ça m'a l'air tout à fait intrigant (dans le bon sens du terme, pas dans ce sens vieilli qui a donné un substantif tout aussi peu employé aujourd'hui).
Billbis t'a déjà donné tous les conseils dont tu avais besoin je pense.
Tu n'as pas besoin de
créer un index contenant tous tes objets. La propriété
Room.ObjectCount se charge justement pour toi de compter le nombre d'objets présents dans la pièce en cours. D'autre part, AGS contient par défaut un tableau global nommé
object dont chaque entrée correspond à un objet dans la pièce en cours.
Ce que fait donc le code de
Billbis, c'est scruter chaque entrée du tableau, c'est-à-dire récupérer chaque objet de la pièce pour relancer son animation.
La démarche est similaire concernant les personnages (sauf que là, les entrées du tableau
character ne sont pas dynamiquement mises à jour dans chaque pièce, chacune réfère de manière constante à travers tout le jeu à son propre personnage -- ce qui explique qu'on recourt à la propriété
Game.CharacterCount et non pas
Room).
Si tu veux vérifier que l'objet/le personnage récupéré est animé, tu utilises simplement la propriété
Animating (qui existe aussi bien pour les objets que pour les personnages).
Voici ma version du code où j'essaie d'optimiser un peu les choses :
- Code:
-
// Les personnages
int i = 0; // On va commencer au premier personnage (#0)
while (i < Game.CharacterCount) { // Tant que I ne dépasse pas le nombre de personnages dans le jeu
// Si le Ième personnage se trouve dans la pièce du personnage joueur
// et si ce Ième personnage a une animation en cours, on la relance
if ((character[i].Room == player.Room) && (character[i].Animating)) character[i].Animate(...);
i++; // On passe au personnage suivant
}
// Les objets
i = 0; // On va commencer au premier objet (#0)
while (i < Room.ObjectCount) { // Tant que I ne dépasse pas le nombre d'objets dans la pièce
// Si le Ième objet a une animation en cours, on la relance
if (object[i].Animating) object[i].Animate(...);
i++; // On passe à l'objet suivant
}
Et enfin, il existe nécessairement une première entrée dans le tableau
region mais elle réfère à la région "vide", c'est-à-dire à l'absence de région. Cela-dit ça ne devrait pas concerner
Pierrec ici