Fonction TIMER

Questions de programmation / Offset FSUIPC et IOCP

Fonction TIMER

Messagede Michael Blackbird » Mar 31 Jan 2012 01:51

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
Dernière édition par Michael Blackbird le Mer 1 Fév 2012 01:01, édité 2 fois.
Michel
________________________________________________
http://themagicofflight.over-blog.com/
http://www.airsimulation.fr/
Avatar de l’utilisateur
Michael Blackbird
 
Messages: 129
Inscription: 8/08/11
Localisation: Pertuis (84)

Re: Fonction TIMER

Messagede JeeHell » Mar 31 Jan 2012 13:14

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
JeeHell
 
Messages: 1853
Inscription: 18/05/09

Re: Fonction TIMER

Messagede Michael Blackbird » Mar 31 Jan 2012 13:23

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
Michel
________________________________________________
http://themagicofflight.over-blog.com/
http://www.airsimulation.fr/
Avatar de l’utilisateur
Michael Blackbird
 
Messages: 129
Inscription: 8/08/11
Localisation: Pertuis (84)

Re: Fonction TIMER

Messagede Michael Blackbird » Mar 31 Jan 2012 19:28

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
Michel
________________________________________________
http://themagicofflight.over-blog.com/
http://www.airsimulation.fr/
Avatar de l’utilisateur
Michael Blackbird
 
Messages: 129
Inscription: 8/08/11
Localisation: Pertuis (84)

Re: Fonction TIMER

Messagede Michael Blackbird » Mer 1 Fév 2012 01:05

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
Michel
________________________________________________
http://themagicofflight.over-blog.com/
http://www.airsimulation.fr/
Avatar de l’utilisateur
Michael Blackbird
 
Messages: 129
Inscription: 8/08/11
Localisation: Pertuis (84)

Re: Fonction TIMER

Messagede JeeHell » Mer 1 Fév 2012 01:20

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
      }
    }



JeeHell
 
Messages: 1853
Inscription: 18/05/09

Re: Fonction TIMER

Messagede Michael Blackbird » Mer 1 Fév 2012 01:39

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
Michel
________________________________________________
http://themagicofflight.over-blog.com/
http://www.airsimulation.fr/
Avatar de l’utilisateur
Michael Blackbird
 
Messages: 129
Inscription: 8/08/11
Localisation: Pertuis (84)


Retourner vers Programmation Sioc





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 35 invités