Out of range

Fermé
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 - Modifié par letrancheur le 2/09/2016 à 01:25
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 - 3 sept. 2016 à 21:21
Bonjour,
voila je suis occupé de faire un peu de programmation et je suis bloqué sur un problème.
Je suis occupé de faire une petite détection de jauge d'HP ma fonction fonctionne mais lorsque je cache la jauge d'hp une j'ai une erreur de range. Je sais ou est mon erreur elle se situe dans ma boucle en revanche je ne sais pas comment la résoudre c'est à dire comment faire un comptage de jauche avant le contage de jeuche j'ai envie de dire :p

Voici mon code

function DetectBarHP(out x, y: integer;XS, YS, XE, YE: integer; DetectAuto:Boolean): integer;// retourne 1 bon 2 barre hp introuvable 3 barres introuvables
var
  BarHPBMP : TSCARBitmap;
  Points: TPointArray;
  w, h, cpt, PixelBar: integer;
begin
  BarHPBMP := TSCARBitmap.Create('deNrjYmBlUBJiAiIVYUYVYQY1UUZNCRYt' +
    'SVZtaSYNUQYdCYZgZ+NQN+NwN6NID5M4X8vkILu0UMf0UNvsMMv8aCt9eX5DBT' +
    '5jRV4TJT4LNSFbbXF7XUk7HTE7DUFnbWELdVFLdUELNQFzVX5rNUE7TRFbTUFr' +
    'dX5bdX5HTcEFfRVLJ1Ys7C2Z0ZI5rzNvxeSKVVMr1kyv2DCzct30cgAefCUj');

  Write('Detection automatique bar HP');
  if DEBUG then WriteLn(': ' + BoolToStr(DetectAuto) + '.');
  if not DEBUG then WriteLn('');
  if(DetectAuto) then
  begin
    if FindBitmapEx(Points, BarHPBMP, XS, YS, XE, YE) then
    begin
      cpt := 0;
      repeat
        w := Points[cpt].x;
        h := Points[cpt].y;     
        if DEBUG then WriteLn('Barre' + IntToStr(cpt) + ' X: ' + IntToStr(w) + '.');
        if DEBUG then WriteLn('Barre' + IntToStr(cpt) + ' Y: ' + IntToStr(h) + '.');
        PixelBar := GetColor(w - 2, h - 3);
        if DEBUG then WriteLn('Color: ' + IntToStr(PixelBar) + '.');
        Inc(cpt);
      until(PixelBar <= 29440) or (cpt >= 4);//le probleme ce situe au niveau de la boucle j'imagine vu que je défini 4 comme sortie mais si il n'y en à que 3 il est évidement perdu
      if(cpt < 5) then
      begin
        result := 1;
        if(DEBUG) then WriteLn('Barre HP X: ' + IntToStr(w) + '.');
        if(DEBUG) then WriteLn('Barre HP Y: ' + IntToStr(h) + '.');
        x := w - 1;   
        y := h - 2; 
        Write('Barre HP détecté');
        if DEBUG then Writeln(': (' + IntToStr(x) + ';' + IntToStr(y) + ').' );
        if not DEBUG WriteLn('');
      end else
      begin
        result := 2;
      end;
    end else
    begin
      result := 3;
    end;
  end else
  begin
    WriteLn('Initialisation manuel barre HP activé');
  end;
end;



Merci d'avanace

1 réponse

En général les erreurs de "out of range" impliquent des valeurs qui ne peuvent pas être prises en charge par la fonction. Par exemple des valeurs négatives ou des valeurs dépassant un certain seuil (valeurs maximales).
J'ai l'impression que tu as déjà rencontré ce genre de soucis et que tu avais inversé des valeurs à l'appel de la fonction.
Ce qui est dommage c'est qu'ici on ne sait pas exactement à quel niveau tu reçois ce "out of range"... mais peu importe il ne peut s'agir que de "valeurs interdites", si tu observes toutes tes variables et que tu vois que l'une d'elles n'a pas une valeur "acceptable" tu sais d'où vient le soucis... par après il faudra faire en sorte de fournir à ta fonction "les bonnes valeurs"...
Peut-être que quand la "jauge" est cachée, tu obtiens des "valeurs interdites" (style -1 comme en C), il faut alors "sauvegarder" les valeurs juste avant que tu ne caches la jauge comme ça tu pourrais éviter le soucis.
0
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 7
2 sept. 2016 à 14:26
je sais ou est le problème mais ne sais pas comment le résoudre.
La fonction fonctionne lorsque la barre HP est visible maintenant si elle est caché ou introuvable ce qui arrivera surement à certains utilisateurs, Il faudrait qu'il y ai un message d'erreur fait pas moi et non généré par le compileur.
0
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 7
2 sept. 2016 à 14:29
je sais que mon problème ce situe dans la condition de sortie de ma boucle mais je ne sais pas quoi mettre comme sortie
0
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 7
3 sept. 2016 à 21:21
UP
0