narcibrook Pas mal
Messages : 32
| Sujet: Changement de direction d'une AI Mar 5 Juin 2012 - 16:20 | |
| Bonjour; je bloque sur un problème de direction pour une AI. Je voudrais que mon AI change de direction dès qu'elle rencontre un mur, mais c'est bête, j'y arrive pas J'ai récupéré ce script dans l'exemple "treasure" fournis avec GameMaker : Dans "Script"(appelé "direction_AI"): - Code:
-
if (hspeed == 0) { if (random(3)<1 && place_free(x-2,y)) { hspeed = -2; vspeed = 0; } if (random(3)<1 && place_free(x+2,y)) { hspeed = 2; vspeed = 0; } } else { if (random(3)<1 && place_free(x,y-2)) { hspeed = 0; vspeed = -2; } if (random(3)<1 && place_free(x,y+2)) { hspeed = 0; vspeed = 2; } }
Dans "Create - Code:
-
motion_set(choose(0,90,180,270),2);
Dans "Step" - Code:
-
image_angle=direction;
if !place_free(x,y) { hspeed=-hspeed; vspeed=-vspeed; direction_AI(); } if place_snapped(17,17) { direction_AI() }
Ca marche nickel, a un détail près, c'est que l'AI change de direction a n'importe quel moment, alors que je veux que ça change de direction uniquement quand il y a collision avec un object... Merci pour vos conseil !!! J'essai de le modifier, mais j'arrive a rien... |
|
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: Changement de direction d'une AI Mar 5 Juin 2012 - 18:47 | |
| C'est possible que l'objet correspondant à ton AI soit "Solid", dans tel cas le place_free() détecterait peut être ton personnage. Regarde dans l'objet, décoche la case "Solid" si elle est cochée, et si ce n'est pas le cas, désolé je ne vois pas d'où ça vient :p |
|
narcibrook Pas mal
Messages : 32
| Sujet: Re: Changement de direction d'une AI Mer 6 Juin 2012 - 0:24 | |
| En fait je pense que c'est la partie "if place_snappe...etc" qui fait le changement de direction mais si je le supprime plus rien ne marche il me faut faire un code différent je crois ... |
|
narcibrook Pas mal
Messages : 32
| Sujet: Re: Changement de direction d'une AI Sam 9 Juin 2012 - 6:59 | |
| C'est bon j'ai "pondu" un script que fait exactement ce que je voulais (sûrement très mal optimisée mais bon ) Dans create: - Code:
-
lib_gauche=0; lib_droite=0; lib_devant=0; lib_derriere=0; Dans step: - Code:
-
//Pour orienter le sprite en fonction de la direction. image_angle=direction;
//Pour avancer. xx=lengthdir_x(1,direction); yy=lengthdir_y(1,direction); if (place_free(x+xx,y)){x+=xx;} if (place_free(x,y+yy)){y+=yy;}
//Pour vérifier si la place est libre des quatre coté de l'object en fonction de la direction. if place_free(x+lengthdir_x(1,direction+90),y+lengthdir_y(1,direction+90))lib_gauche=0; else lib_gauche=1; if place_free(x+lengthdir_x(1,direction-90),y+lengthdir_y(1,direction-90))lib_droite=0; else lib_droite=1; if place_free(x+lengthdir_x(1,direction),y+lengthdir_y(1,direction))lib_devant=0; else lib_devant=1; if place_free(x+lengthdir_x(1,direction+180),y+lengthdir_y(1,direction+180))lib_derriere=0; else lib_derriere=1;
//Pour changer de direction aléatoirement en fonction des places libres0 if (lib_devant=1)&&(lib_droite=1)&&(lib_gauche=1)&&(lib_derriere=1) {exit} else if (lib_devant=1)&&(lib_droite=1)&&(lib_gauche=1) {direction+=180;} else if (lib_devant=1)&&(lib_gauche=1) {direction-=choose(90,180);} else if (lib_devant=1)&&(lib_droite=1) {direction+=choose(90,180);} else if (lib_devant=1) {direction+=choose(90,-90,180);} Maintenant, je fait appel a toutes les bonnes volontés qui pourraient me dire comment optimiser le code, s'il est possible d'avoir le meme résultat avec un code plus léger, car je suis sûr que je me suis compliqué la vie Merci |
|
Contenu sponsorisé
| Sujet: Re: Changement de direction d'une AI | |
| |
|