| Faire s'écarter deux personnages l'un de l'autre. | |
|
|
Auteur | Message |
---|
chefgeorges Cliqueur Emérite
Nombre de messages : 501
Date d'inscription : 01/02/2008
| Sujet: Faire s'écarter deux personnages l'un de l'autre. Lun 27 Juil 2015 - 21:50 | |
| Bonjour, J'ai un petit soucis de collision entres personnages non-joueur. Deux personnages suivent le player. J'aurai souhaité qu'il puissent s'écarter l'un de l'autre si ils se superposent. J'ai tenté un truc très basique mais qui ne fonctionne pas : - Code:
-
function repeatedly_execute() { if ((player.ID == 0)&&(cPlayer2.IsCollidingWithChar(cPlayer3) == 1)) { cPlayer2.Walk(cPGM.x+50, 416, eNoBlock); cPlayer3.Walk(cSIMON.x-50, 416, eNoBlock); } } Le problème c'est que ça créé une espèce de boucle. Tant que les deux personnages sont en contact ils font du moonwalk sur place |
|
| |
Creamy Disciple de la Grande Tasse Bleue
Nombre de messages : 1266
Date d'inscription : 15/10/2007
| Sujet: Re: Faire s'écarter deux personnages l'un de l'autre. Lun 27 Juil 2015 - 22:19 | |
| Tu ne mets pas la propriété "solide" des persos sur ON parce que tes persos évoluent sur la même ligne horizontale, c'est ça? Je te propose de déclarer une variable et de l'ajouter en condition : - Code:
-
function repeatedly_execute() { if ((player.ID == 0)&&(myCounter == 0)&&(cPlayer2.IsCollidingWithChar(cPlayer3) == 1)) { cPlayer2.Walk(cPGM.x+50, 416, eNoBlock); cPlayer3.Walk(cSIMON.x-50, 416, eNoBlock); myCounter = 1; }
if (cPlayer2.X == cPlayer3.X+100) { myCounter = 0; } }
|
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Faire s'écarter deux personnages l'un de l'autre. Lun 27 Juil 2015 - 22:50 | |
| Je fais juste mon pinailleur pour dire qu'il est plus propre d'utiliser true et false (et déclarer la variable comme booléenne) que 1 et 0 J'explique aussi rapidement le problème que Creamy propose de résoudre en ajoutant une variable : le code de chefgeorges se déclenche lorsque deux personnages se chevauchent à l'écran (cf. IsCollidingWithChar). Donc tant que les deux personnages sont superposés, la commande Walk est déclenchée. Le problème c'est que les personnages ne sont pas séparés instantanément après que cette commande est déclenchée : suivant divers paramètres (le nombre de pixels qui se chevauchent et la vitesse de chacun des personnages) l'éloignement peut prendre plusieurs cycles avant que les personnages cessent d'être superposés. Ainsi, la commande Walk est à nouveau exécutée après sa première exécution, car les personnages se chevauchent toujours. L'effet vicieux de la commande Walk, si je ne m'abuse, c'est qu'elle attend au moins un cycle avant de déplacer effectivement les personnages. Donc à chaque nouveau cycle, la commande Walk est exécutée, ayant pour effet de laisser les personnages sur place jusqu'au prochain cycle, où nécessairement ils seront toujours superposés, et donc la commande à nouveau exécutée. Ad lib. C'est un problème assez récurrent, donc je pensais qu'il serait bon de l'expliquer en détails. |
|
| |
chefgeorges Cliqueur Emérite
Nombre de messages : 501
Date d'inscription : 01/02/2008
| Sujet: Re: Faire s'écarter deux personnages l'un de l'autre. Mar 28 Juil 2015 - 8:12 | |
| @Kitai: c'est bien ce qu'il me semblait - Creamy a écrit:
- Tu ne mets pas la propriété "solide" des persos sur ON parce que tes persos évoluent sur la même ligne horizontale, c'est ça?
Tout-à-fait ! Bonne idée la variable, merci. Ça semble fonctionner... je dis "ça semble" parce que ça parait quelque peu "aléatoire", peut-être dû à la légère pause de la commande follow Mais c'est satisfaisant. Je voulais faire évoluer le code pour que les perso s'éloigne l'un de l'autre en fonction de leur position l'un par rapport à l'autre. Mais là ils le font ou l'un deux décide de dépasser et le personnage non-joueur et le player. Du coup, je trouve ça plus "naturel". Je continue à tester la chose NB: par contre, il faut mettre des petits x à if (cPlayer2.x == cPlayer3.x+100 |
|
| |
chefgeorges Cliqueur Emérite
Nombre de messages : 501
Date d'inscription : 01/02/2008
| Sujet: Re: Faire s'écarter deux personnages l'un de l'autre. Mar 28 Juil 2015 - 8:23 | |
| Hmm... Je crois que je n'échapperai pas à un code un peu plus complexe. J'ai encore le moonwalk dans certaines situations. Je vais y réfléchir un peu de mon côté EDIT : c'est difficile à juger, mais finalement je sais pas vraiment si le code fonctionne ou pas... Je continue mes recherches... |
|
| |
Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: Faire s'écarter deux personnages l'un de l'autre. Mar 28 Juil 2015 - 9:03 | |
| Sinon tu lances une musique de Michael Jackson a chaque fois que les persos font du Moonwalk. Si si, c'est aussi une solution. |
|
| |
chefgeorges Cliqueur Emérite
Nombre de messages : 501
Date d'inscription : 01/02/2008
| Sujet: Re: Faire s'écarter deux personnages l'un de l'autre. Mar 28 Juil 2015 - 10:51 | |
| J'ai trouvé la solution, qui une fois de plus est d'une simplicité limpide, et c'est Creamy qui m'a mis sur la voie Il suffit de dire : quand joueur 1 est le player, Solid = false, et pour players 2 et 3 Solid = true (avec des baseline différentes)Çà semble fonctionner correctement maintenant |
|
| |
Creamy Disciple de la Grande Tasse Bleue
Nombre de messages : 1266
Date d'inscription : 15/10/2007
| Sujet: Re: Faire s'écarter deux personnages l'un de l'autre. Mar 28 Juil 2015 - 11:18 | |
| Cool A titre indicatif, je crois que mon code foire car la commande "Followcharacter" interfère : les persos 2 et 3 se remettent à suivre le joueur avant d'avoir atteint 100 pixels d'écart entre eux. Du coup la variable ne se remet pas à 0 (ou à "false" si tu as mis une booléenne ) |
|
| |
Contenu sponsorisé
| Sujet: Re: Faire s'écarter deux personnages l'un de l'autre. | |
| |
|
| |
| Faire s'écarter deux personnages l'un de l'autre. | |
|