Web loisir, Web Informatique

MAJ : 28 juin 2002

  Le site Web du loisir et de l'informatique

Delphi X

Utilisez cette barre de navigation pour vous déplacer dans ce site


Sommaire
Page d'accueil du site

Delphi
Mes programmes
Multi-Média Conception
Trucs et astuces
Aide sur HelpWork Shop
Aide sur Delphi X (les bases)
Ma charte de création d'interface

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  Introduction
Dans cette rubrique, vous apprendrez les bases pour utiliser Delphi X. Delphi X regroupe des composants pour pouvoir utiliser DirectX dans vos application Delphi.
Téléchargez ces composants ici (872 Ko).

Les bases
Une fois les composants Delphi X installés, une nouvelle palette de composant apparaît dans Delphi. Ce sont ces composants qu'il faudra utiliser pour vos applications.

Liste des composants Delphi X

Icône Nom Description
  DXDraw C'est le composant principal de Delphi X. C'est celui qui affiche les objets graphiques de Delphi X.
DXDIB Ce composant Stocke une image (BMP/DIB) pour l'utiliser dans votre application.
DXImageList Ce composant stocke une liste d'image (BMP/DIB) pour les utiliser en sprite notamment. 
DX3D Ce composant permet d'utiliser les fonctions Direct 3D dans vos applications.
DXSound Ce composant permet d'utiliser les fonctions sonores de Direct Sound.
DXWave Contient un fichier Wave qui peut être lu par un DXSound par exemple.
DXWaveList Contient une liste de sons qui pourrat être utilisé dans vos applications.
DXInput Permet de gérer la souris, les manettes et le retour de force.
DXPlay Permet de créer des applications réseau en utilisant Direct Play.
DXSpriteEngine Ce composant gère les sprites de votre application (mouvement, visibilité...).
DXTimer Le timer DelphiX est beaucoup plus précis que celui de Delphi. C'est aussi un composant de base pour vos applications graphiques.
DXPaintBox Ce composant permet d'afficher des images dans votre application. Elles sont convertie en DIB pour pouvoir être utilisées dans vos programmes.

Préparation pour faire une première application DirectX
Dans le source de votre programme, insérer dans la clause "uses" la class "DXClass". Après,modifiez la déclaration de la form : Form1 = Class (TDXForm) ;
Notez qu'une application graphique Delphi X ne se debug pas (sous risque de gros plantage de votre ordinateur). Si vous mettez un point d'arrêt, Stoppez et relancer votre application.

Les composants à insérer pour faire une application DelphiX
Commenser par insérer un TDXDraw, un TDXImageList, un TDXTimer, un TDXInput et un TDXSpriteEngine.
Dans les propriétés du DXImageList, réglez le paramètre DXDraw à DXDraw1 et commencer à insérez deux images. L'une sera utilisée pour le fond et l'autre pour faire un sprite en mouvement. Pour cela, cliquez sur "items" et dans la liste ajoutez un sprite en cliquant sur "ajouter un nouveau". Dans les propriété de la nouvelle image, définissez son nom ("Fond"). Choisissez une image avec l'option "Picture". Faite la même opération pour un deuxième sprite et nommez la "Actif".
Dans les propriétés du TDXSpriteEngine, réglez la propriété DXDraw à DXDraw1.
Il faut désactiver la souris et le joystick du TDXInput (Mouse/Enabled := false).
Enfin, dans la propriété intervale du DXTimer, entrez 0.

Le code...
Il faut maintenant passer au code de l'application.
Il faut déclarer un sprite qui pourra être contrôlé par vous. Pour faire cela dans la clause "type", déclarer une classe :
TSpriteActif = Class (TImageSprite)
private
  FName : String ;
public
  property Name : String Read FName write FName ;  //Nom perso du sprite
  procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;  //Procedure de collision
  procedure DoMove(MoveCount: Integer); override; //Procedure de mouvement.
end ;

Faite ensuite CTRL+ALT+C pour créer les procédures du sprite.
Et dans une procédure de la form (OnCreate), créez le sprite comme ca :
 With TSpriteActif.Create (DXSpriteEngine1) do
  begin
  X := 10 ;
  Y := 10 ;
  Image := DXImageList1.Items.Find('Actif') ;

  Width := Image.Width ;
  Height := Image.Height ;
  end ;

Description des lignes :
Un sprite est toujours crée dans un DXSpriteEngine. La propriété X place le sprite et 10 sur l'axe X et c'est la même chose pour l'axe Y. La propriété image défini l'image du sprite. Le DXImageList possède une propriète find qui recherche l'image portant le nom entre parenthèses (d'où l'interêt de nommer les images du DXImageList). Les lignes Width et Height fixent la largeur et la hauteur du sprite à la taille de l'image attribuée.
Il faut maintenant demander à DirectX d'afficher les sprites. Pour Cela, dans la procédure "OnTimer" du DXTimer, insérez les ligne suivantes :
 DXDraw1.Surface.Fill (0) ;
 DXSpriteEngine1.Move (1) ;
 DXSpriteEngine1.Dead ;
 DXSpriteEngine1.Draw ;
 DXDraw1.Flip ;

Description des lignes :
La procédure Fill (0) du DXDraw remplit la surface du DXDraw avec la couleur entre parenthèses (ici noir).
La ligne suivante demande au moteur de sprite de rafraîchir les positions des sprites. La suivante lui demande de détruire les sprites qui ont été "tués" durant l'application.
La procédure "Draw" affiche tous les sprites actifs.
Enfin, la dernière ligne copie de la mémoire au DXDraw les images ainsi modifiées.
Si vous compilez le projet vous devez voir un sprite mais toujours sans mouvement. Pour lui rajouter un mouvement, aller dans la procédure TSpriteActif.DoMove et insérez le code suivant :
 If (isUP in Form1.DXInput1.States) and (Y > 0) then Y := Y - MoveCount ;
 If (isDown in Form1.DXInput1.States) and (Y < 480 - Height) then Y := Y + MoveCount ;
 If (isLeft in Form1.DXInput1.States) and (X > 0) then X := X - MoveCount ;
 If (isRight in Form1.DXInput1.States) and (X < 640 - Width) then X := X + MoveCount ;
 Collision ;

Les quatre premières lignes vérifie l'état du DXInput et déplace le sprite si besoin. La dernière ligne test si le sprite est en collision avec un autre et si c'est le cas, la procédure DoCollision sera déclenchée.

Voilà, vous pouvez compilez et durant l'exécution, appuyez sur les touches fléchée du clavier pour déplacer le sprite.

Faire un fond
Pour faire un fond, retournez dans les déclaration des types et rajoutez :
TFond = Class (TBackgroundSprite) ;
Ensuite, allez dans la procédure OnCreate de la form et ajoutez le code :
 With TFond.Create (DXSpriteEngine1.Engine) do
  begin
  Image := DXImageList1.Items.Find ('Fond') ;
  Width := Image.Width ;
  Height := Image.Height ;
  SetMapSize (succ(DXDraw1.Width div 50), succ(DXDraw1.Height div 50)) ;
  end ;

Description des lignes :
La ligne SetMapSize permet de créer une image répétée dans toutes la surface du DXDraw.

Exemple d'application Delphi X
Le programme suivant utilise toutes fonctions décrites plus haut.
Téléchargez les sources de cet exemple ici (62  Ko).

 Par Cyril LACABANNE
Adresse Mail : iccl@wanadoo.fr