Page 1 sur 1

Fonction TIMER

MessagePosté: Mar 31 Jan 2012 01:51
de Michael Blackbird
Salut

Il me semble que la fonction TIMER comporte un bug. En tous cas c'est un cas non prévu apparement.

Afin de simuler une fuite d'essence, j'ai écrit cette ligne

Code: Tout sélectionner
&fs_FUEL_CENTRE = TIMER 0, -83886, 100 // -1% / s

Var 7450, name fs_FUEL_CENTRE, static, Link FSUIPC_INOUT, Offset $0B74, Length 4


Vu que 100% de remplissage équivaut à 8388608, le fait d'écrire ça permet effectivement d'obtenir une fuite de 1% par seconde (pour les besoins d'un exercice). Le hic, c'est que lorsque la valeur approche de 0 mais qu'elle ne l'atteint jamais, la valeur de fs_FUEL_CENTRE devient négative et le TIMER ne s'arrête pas. Etant donné que je n'aurai jamais une valeur initiale de remplissage égale à un nombre entier de décrément pour aboutir à une valeur finale de 0, je vais devoir faire un test pour éviter cet effet, mais bon, c'est pas cool rigolus

L'autre effet inattendu, c'est que Microsoft n'a pas dû prévoir d'avoir une valeur négative pour le remplissage des réservoirs. En fait le moteur ne s'arrête pas mais l'avion part en vrille gratgrat

Re: Fonction TIMER

MessagePosté: Mar 31 Jan 2012 13:14
de JeeHell
Bonjour,
Il va te falloir feinter ton timer:
-lorsque tu déclenches le timer, tu copies la valeur de l'offset "qté fuel" dans une variable non liée à FS (que tu appelles par exemple "temp_FUEL_CENTRE". Cette variable, tu ne la recopies dans "fs_FUEL_CENTRE" qu'à la condition qu'elle soit positive ou nulle. Si elle est négative, tu la ramènes à zéro (ce qui devrait stopper le timer") puis tu la copies dans "fs_FUEL_CENTRE"
-Ensuite tu déclenches ton timer sur "temp_FUEL_CENTRE".

Ca devrait ressembler à:

Code: Tout sélectionner
// lignes suivante à mettre là où tu déclenches le timer
{
  &temp_FUEL_CENTRE = &fs_FUEL_CENTRE
  &temp_FUEL_CENTRE = TIMER 0, -83886, 100 // -1% / s
}
//


Var 7450, name fs_FUEL_CENTRE, static, Link FSUIPC_INOUT, Offset $0B74, Length 4
Var 7451, name temp_FUEL_CENTRE   //vérifie que le numéro de variable soit compatible avec ton code préexistant
{
  IF &temp_FUEL_CENTRE < 0
  {
    &temp_FUEL_CENTRE = 0   
  }
  ELSE
  {
    &fs_FUEL_CENTRE = &temp_FUEL_CENTRE
  }
}



@+
JL

Re: Fonction TIMER

MessagePosté: Mar 31 Jan 2012 13:23
de Michael Blackbird
C'est un peu ce que je voulais faire. C'est cool, j'ai même plus besoin de réfléchir ce soir quand je m'y remettrai...
merci affiche

Re: Fonction TIMER

MessagePosté: Mar 31 Jan 2012 19:28
de Michael Blackbird
En copiant ton code, je me suis aperçu d'un pb. Il faut supprimer le ELSE et faire l'affectation finale systématiquement sinon ça restera toujours dans le IF. Mais merci quand même !!!

Code: Tout sélectionner
  &temp_FUEL = &fs_FUEL_CENTRE
  &temp_FUEL = TIMER 0, -83886, 100 // -1% / s
  IF &temp_FUEL < 0
  {
    &temp_FUEL = 0   
  }
  &fs_FUEL_CENTRE = &temp_FUEL


merci affiche

Re: Fonction TIMER

MessagePosté: Mer 1 Fév 2012 01:05
de Michael Blackbird
En fait ça ne marche pas.

Je pense que l'on a oublié que le programme ne sort pas de la ligne avec le TIMER tant qu'il ne voit pas la fin et comme il passe en négatif avec son bug, il ne s'arrête jamais et le test n'est jamais exécuté !! Va falloir que je ruse avant de lancer le TIMER pour m'arranger avec la valeur de début pour calculer un décrément qui aboutisse à 0....

A moins qu'un de vosu ait une autre idée sioux
gratgrat

Re: Fonction TIMER

MessagePosté: Mer 1 Fév 2012 01:20
de JeeHell
Tiens essaye cela, j'ai remis mon else (oui j'y tiens cligneoeil ). SI passage en négatif, il réajuste à 1% de 83886.

Code: Tout sélectionner
    // lignes suivante à mettre là où tu déclenches le timer
    {
      &temp_FUEL_CENTRE = &fs_FUEL_CENTRE
      &temp_FUEL_CENTRE = TIMER 0, -83886, 100 // -1% / s
    }
    //


    Var 7450, name fs_FUEL_CENTRE, static, Link FSUIPC_INOUT, Offset $0B74, Length 4
    Var 7451, name temp_FUEL_CENTRE   //vérifie que le numéro de variable soit compatible avec ton code préexistant
    {
      IF &temp_FUEL_CENTRE < 0
      {
        &temp_FUEL_CENTRE = 83886 / 100   
      }
      ELSE
      {
        &fs_FUEL_CENTRE = &temp_FUEL_CENTRE
      }
    }




Re: Fonction TIMER

MessagePosté: Mer 1 Fév 2012 01:39
de Michael Blackbird
Effectivement ton test n'est pas là où je l'ai placé. Il sera exécuté à chaque modif de la var temporaire. Je suis couillon...

Bon je verrai ça demain. Merci encore sourirebis

zzzzzzzz