|
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.
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).
|