FlightGear/Gli script XML: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nuova pagina: {{FlightGear}} Categoria:FlightGear {{avanzamento|0%}} In questo capitolo si descrive come costruire l'impalcatura principale di FlightGear, impalcatura fatta di codice XML che ...
(Nessuna differenza)

Versione delle 23:30, 4 mar 2012

Indice del libro

Questa pagina è uno stub Questo modulo è solo un abbozzo. Contribuisci a migliorarlo secondo le convenzioni di Wikibooks

In questo capitolo si descrive come costruire l'impalcatura principale di FlightGear, impalcatura fatta di codice XML che si appoggia sulle fondamenta di programmi scritti in C++. L'utilizzo del cosce XML ha permesso, all'inizio, di definire la possibilità di programmare facilmente l'interfaccia grafica GUI (Graphical user interface) senza dover scrivere righe in codice C++. Questo approccio, molto simile a quello utilizzato per costruire le interfacce grafiche Web, ha permesso di allargare notevolmente la fascia dei possibili programmatori di FlightGear prima spaventati dalla complessità del codice C++.

Successivamente l'uso dell'XML si è allargato ad altre parti del programma ed è diventato lo strumento di interfaccia tra il nucleo di FlightGear in C++ ed il linguaggio di programmazione Nasal utilizzato per scrivere efficaci script che di fatto coprono la maggior parte del codice scritto.

Binding

Nei linguaggi di programmazione il concetto di Binding è quello di generare un legame tra due differenti insiemi di codice. Ad esempio il nucleo portante di codice di FlightGear è formato da una serie di programmi in C++ che causa la loro intrinseca complessità sono gestiti solo da pochi ed esperti programmatori. Il Bindig fa si che i dati provenienti da alcune proprietà, dette per l'appunto <PropertyList> possano essere modificate da appositi comandi XML i quali non solo altro che chiamate al codice C++ che costituiscono il nucleo del programma.

Un tipico esempio è la modifica dei valori rilasciati da un asse del joystick in modo che siano compatibili con i valori previsti da FlightGear. Ovviamente alcune cose, come l'interfacciamento tra il PC ed il joystick, avviene tramite programmi di sistema operativo e quindi per mezzo di chiamate scritte in C++. Queste chiamate di basso livello permettono la generazione di un albero delle proprietà del dispositivo joystick raffigurato in questo esempio per il solo asse 0 e bottone 0 da una struttura XML del seguente tipo:

  <PropertyList>
    <name>Logitech Inc. WingMan Force 3D</name>
    <axis n="0">
      <desc>Aileron</desc>
    </axis>
    <button n="0">
      <desc>Brakes</desc>
    </button>
  </PropertyList>

Questa struttura contiene tre oggetti, il nome della proprietà (<name>..</name>) e due variabili <axis n="0">..</axis> e <button n="0">..</button>. A questo punto è possibile fare il binding ovvero legare il valore presente in una certa proprietà con qualche trasformazione che può avvenire richiamando un codice in C++ e/o utilizzando uno script in Nasal.

<source lang="xml">

 <PropertyList>
 ...
 <axis n="0">
   <desc>Aileron</desc>
   <binding>
     <command>property-scale</command>
     <property>/controls/flight/aileron</property>
     <factor type="double">1.9</factor>
     <offset type="double">-0.055</offset>
     <dead-band type="double">0.15</dead-band>
     <power type="double">1.0</power>
   </binding>
 </axis>

Riferimenti