En utilisant directdraw avec delphi


Cela montre la façon de commencer à utiliser la bibliothèque DirectX en Delphi programmes et démontre une application simple à l'aide du freeware bibliothèque DelphiX.
Si vous avez déjà essayé de faire écran à la vitesse de sortie sous Windows, vous savez qu'il est pas une tâche facile. Avec tous les trucs possible, il tombe encore lamentablement loin de commercial vitesses de jeu. Mais je vais vous montrer comment utiliser DirectX dans vos applications pour faire lisse sortie rapide qui peut être programmé en microsecondes pas minutes!
il y A quelques années, Microsoft développeurs rendu compte que Windows n'a pas été une plate-forme de jeux et ils se sont engagés à changer cela. En 1995, la courte durée de l'Aile est apparu. Cela a permis sortie rapide dans les modes 256 couleurs sur windows 3.1 et windows 95. Il était rapide, mais limitée et bientôt remplacé par DirectX. C'est une famille d'Api pour rapide d'entrée et de sortie. Vos applications peuvent utiliser des cartes vidéo, cartes son et même de la force de la rétroaction des manettes de jeu par l'intermédiaire de DirectX. Je vais regarder DirectDraw le visuel de l'API et de revenir aux autres dans l'avenir. D'autres Api DirectX inclure DirectSound pour les cartes son, DirectInput pour manettes de jeu, etc, de Direct3d pour les graphismes 3d et DirectPlay pour le multi-joueur. Bien que DirectX est maintenant à la version 6.1, DirectDraw a été pratiquement inchangé depuis la version 3. La Version 3 BTW est celui qui est intégré dans Win NT 4.0.
Windows de la force, c'est qu'il travaille avec de nombreux différents moniteurs, cartes vidéo et dans plusieurs résolutions et profondeurs de couleur. Cela nécessite beaucoup de code entre votre Application et la carte vidéo, de matériel et de cette 'Épaisseur Api' est pourquoi la sortie de Windows routines sont lents. C'était également le cas avec le Dos quand il est apparu, et aux développeurs de jeux est allé directement au métal, au lieu d'utiliser le BIOS ou DOS de routines API. Jusqu'à il y a deux ans, la plupart des jeux ont encore été écrit pour le Dos, même celles qui s'exécutent sous Windows 95. Maintenant, probablement 99% de l'utilisation de DirectX et bientôt, il semble que Windows CE micros sera conduite commerciale des bornes d'arcade de l'utilisation de DirectX.
DirectX/DirectDraw prend en charge une mince API approche avec quelques couches entre le matériel et votre Application. DirectX est construit sur COM, le Modèle d'Objet Composant de sorte que les nouvelles versions peuvent être libérés sans casser votre code existant. Si votre Application fonctionne avec DirectX version 5, il est garanti pour fonctionner avec DirectX 6, 7 ...308!
DirectDraw fournit des informations de votre Application sur le matériel dont dispose la vidéo ou de la carte son a, et ce qui est émulé dans le logiciel. Cette DirectX approche garantit que le logiciel fonctionnera sur des cartes non encore conçus et seront en mesure d'utiliser leurs fonctionnalités avancées. Sur le revers de la médaille, cela signifie que vous devez écrire deux ou trois façons différentes de faire les choses et de choisir les meilleures (= rapide) méthode au moment de l'exécution.
DirectX et Delphi
Même si C et C sont les principales langues de l'ifor DirectX, Delphi est très bien adapté à l'ir. Blake Pierre a la première DirectX en-tête de la traduction de C à Delphi et Borland Charlie Calvert a brossé sur le sujet dans son Delphi 2/4 'Déclenché' livres. M. Hiroyuki Hori au Japon développé DelphiX - un excellent jeu de gratuit Delphi composants de DirectX. Ils sont disponibles dans de nombreux sites sur le Net ou de sa page d'accueil http://www.ingjapan.ne.jp/hori/. Vous aurez aussi besoin d'installer DirectX version 5 ou supérieure. Vous avez probablement eu sur votre système si vous avez acheté un jeu dans la dernière année. Windows 98 et l'avenir NT5 venir avec DirectX construit en. NT 4, Service Pack 3 prend également en charge DirectX 3.0.
je vais maintenant vous montrer l'essentiel de DirectDraw de programmation et comment obtenir le meilleur de la DelphiX des composants avec un exemple d'Application. Si vous utilisez DelphiX, vous trouverez que M. Hori fichiers d'aide sont peut-être pas limpide, mais vous obtenez le code source complet et à un certain nombre de bons exemples de programmes pour remédier à cela. DelphiX est un superbe logiciel et vous pourriez écrire près de arcade, jeux de qualité, de Delphes, de l'utiliser.

Même si vous n'êtes pas dans les jeux de programmation, la vitesse supplémentaire que DirectDraw offre vous permet de créer des applications avec le scintillement d'une connexion haut débit de sortie comme le radar affiche, des oscilloscopes, le défilement des cartes etc. Je l'ai utilisé pour un défilement de la carte et il attire un écran de 256 couleurs hexagones résolution de 1024 x 768 (chaque hexagone s'inscrit dans un rectangle de 32 pixels de large par 34 profondeur) 26 ms sur un P2 300 équipé d'un AGP Matrox Millenium carte. C'est près de 40 images par seconde, pas mal du tout pour Delphi..
En DirectDraw, Microsoft n'avez pas chucked le GDI. L'une des grandes douleurs de Dos de développement du jeu a été sortie de ce texte, en particulier d'avoir à créer vos propres polices de message ou de bitmaps. Heureusement, le GDI fonctionne avec DirectDraw, de sorte que les polices Truetype peuvent être utilisés. En fait, la plupart du GDI œuvres, aussi longtemps que un peu de soin est pris. Bien sûr GDI de sortie n'est pas très rapide, de sorte que vous devriez vraiment utiliser pour la création de texte, menus, etc ...
prise en main
Vous aurez besoin de DirectX fichiers d'en-tête - il n'y a pas de meilleur endroit que le DelphiX de la bibliothèque. Fournis Directx.pas est une tripotée de 300 ko en taille. Il comprend tous les DirectSound etc Api dossiers, Guid etc. Si vous vous demandez dans le désert de Gobi pour les cinq dernières années, vous avez peut-être pas familier avec les Guid, mais ils sont simplement une collection de nombres comme ceci ['{5C690320-0BD2-11D3-89DF-00409545E8E7}'] qui identifie de manière unique les objets et les classes dans Windows. Microsoft soigneusement mis GUID contenant vos cartes réseau' Adresse Mac dans tous les fichiers Word et Excel créé sur votre PC. Si vous faites Ctrl-Shift G en Delphi Ide, les 12 derniers chiffres de l'GUID générés sont vos cartes de réseau de l'Adresse Mac (si vous avez une carte réseau).
DirectDraw n'est pas difficile à utiliser, juste un peu délicat dans les lieux. Voici mes cinq point de guide pour les débutants pour commencer. Tout d'abord créer un objet DirectDraw. Cela représente une carte vidéo/moniteur, et sous Windows 98 peut prendre en charge plusieurs périphériques. C'est la définition de DirectDrawCreate.
fonction de DirectDrawCreate
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp (lpGUID: PGUID
hors lplpDD: IDirectDraw
& ! & ! & ! & nbsp pUnkOuter: IUnknown): HRESULT
Partout où il y a un pUnkOuter paramètre, il suffit de passer au néant. Cet appel doit retourner un DD_OK valeur (=0). Autre chose est une erreur et devrait être géré par votre code..
la deuxième Étape consiste à spécifier la coopérative. Veut-il la totalité de l'écran uniquement ou de le partager? La plupart des jeux en mode plein écran afin que votre application peut choisir le mode de l'écran et de la résolution à utiliser. Si vous l'utilisez dans une fenêtre, votre application ne doit pas changer de mode.
La dwFlags paramètre permet de préciser si vous utilisez le mode plein écran ou pas, ou si votre application les contrôles de l'écran si aucune autre application peut changer et même si l'utilisateur peut Ctrl-Alt-Suppr pour redémarrer.
fonction de SetCooperativeLevel(hWnd: HWND dwFlags: DWORD): HRESULT
il est possible de demander l'objet DirectDraw pour tous les modes vidéo pris en charge. La plupart des cartes vidéo de soutien beaucoup de modes, mais la fréquence la plus élevée/modes de couleur peuvent avoir besoin de plus de bande passante que votre moniteur peut faire face. La commutation de ces modes ne fonctionnent pas et pourrait quitter le moniteur dans un unsynched état, assurez-vous d'inclure un avertissement lorsque vous distribuer vos applications! Mieux encore, obtenir à l'utilisateur de choisir le mode à partir d'une liste. Tremblement de terre, et beaucoup de jeux utilisent cette approche.
l'Étape 3 est de définir le mode de l'écran. Cela s'applique uniquement si vous souhaitez d'accès à l'écran.
fonction de SetDisplayMode(dwWidth, dwHeight, dwBpp: DWORD): HRESULT
dwBpp est le nombre de Bits par pixel, c'est à dire 8 de 256 couleurs. 640x 480 par 8 est probablement un pari sûr sur n'importe quel PC!
l'Étape 4 est où les surfaces sont créées. Toutes les images sont détenus dans des surfaces. Ce sont juste des blocs de ram avec une option de palette et votre application peut créer des surfaces dans le PC principal du système de la ram ou de la carte vidéo de ram. Aucun prix pour deviner que les images de la mémoire vidéo les images sont plus rapide pour copier de ram vidéo, bien que les cartes AGP peut transférer des données à partir de votre PC ram très rapidement.
CreateSurface crée une surface en fonction de la surface de la description de paramètre.
fonction de CreateSurface(const lpDDSurfaceDesc: DDSURFACEDESC
& ! & ! & ! & ! & ! & ! & ! & nbsp hors lplpDDSurface: IDirectDrawSurface pUnkOuter: IUnknown): HRESULT
La surface principale représente l'écran et est connu comme le Principal Surface. Mise à jour de cette directement, peut conduire à l'affichage raster de capture d'images comme ils sont tirés. Cela donne un cisaillement ou de déchirure de l'effet et vous pouvez l'éviter en utilisant un autre bloc de mémoire vidéo comme un Tampon d'Arrière-plan. La Principale Surface est toujours affiché, mais votre application écrit toujours dans la mémoire tampon d'arrière, puis appelle le flip méthode. Cela provoque la Primaire la Surface et à l'Arrière contenu de la mémoire Tampon pour échanger les positions et de votre moniteur affiche maintenant la nouvelle image, C'est le secret de la douceur d'animation par ordinateur et peut arriver jusqu'à 70 fois par seconde.

Une Primaire de la Surface de 1024 x 768 en 256 couleurs et un tampon d'arrière-plan prend 1,5 Mo de ram vidéo. Donc, une carte vidéo avec 4 mo de vidéo ram sera à seulement 2,5 Mo de gauche pour le stockage de vos images. Vous préférerez peut-être allouer un bloc de mémoire ram dans le PC principal de la mémoire, de faire toutes les manipulations puis le copier dans la carte vidéo de la surface pour être affiché. Il existe de nombreuses techniques pour l'optimisation de la mise à jour de la vitesse et de la partie de l'amusement est de les essayer. Garder la trace des bits de l'écran a changé et que la copie bit est un moyen de minimiser la circulation. Le monde n'a pas l'AGP, donc vous devez tester votre application sur autant d'ordinateurs que possible.
C'est vraiment tout y est. L'étape 5 est assis à l'arrière et de la pensée - wow - je peux maintenant utiliser DirectDraw. Il y a quelques petites complexités comme l'obtention de vos images à partir des fichiers bitmap ou des ressources dans un DirectDraw surface. Le bitmap doit être chargé dans la mémoire et ensuite copié dans la mémoire tampon d'arrière.. Windows bitmaps contenir une palette et sont généralement stockés à l'envers. Vous pouvez vous amuser codage de ce vous-même ou utiliser le DelphiX de la bibliothèque de composants pour les images bitmap et la gestion de la palette.
Accès Direct à la Vidéo de Ram
Si votre Application a pour modifier directement les pixels en mémoire vidéo, alors vous devez spécifier une zone rectangulaire, appel de verrouillage pour obtenir l'accès exclusif à la ram, de modifier ou de lire les pixels et enfin d'appel de déverrouillage pour le libérer. Le code de Verrouillage et de Déverrouillage doit être court que Windows est arrêté.
Regarder le Terrain!
Pas de son pas de parler de football. Chaque surface a un terrain. Son le réglage de la largeur en octets. Si vous manipulez des images au niveau de l'octet, vous devez être conscient de cela. La hauteur d'une surface est souvent différente de la largeur. Chaque pixel de la ligne commence 'pitch' octets à partir de la précédente. Cela peut se produire parce que la largeur est un nombre impair d'octets et de la hauteur des tours jusqu'à la plus proche de mot double ou ses juste la façon dont la carte vidéo n'. La largeur peut être de 105 mais le pitch peut être 108. La première ligne est de 0 octets à partir du début, la prochaine 108, puis 216 et ainsi de suite.
GDI
en Utilisant le GDI n'est pas un problème majeur. Le GDI est un peu coincé dans ses manières et utilise toujours le même bloc de mémoire vidéo. Cela signifie qu'un système de message (comme une exception non gérée) peuvent ne pas apparaître si vous utilisez de changement de page et l'affichage de l'autre bloc de ram. Cependant, vous pouvez appeler fliptoGDI à faire la primaire surface du GDI ou GetGDISurface pour obtenir un pointeur vers la surface de l'objet.


la perte de Données.
de Perdre des images dans la mémoire vidéo est un problème mineur si l'utilisateur fait un Alt-Tab. Tout est perdu. Cependant DirectX conserve la trace de la 'perte' de statut de surfaces et de se donner une Surface Perdue ' d'erreur si vous essayez de l'utiliser. Votre application doit disposer d'un gestionnaire de recréer les surfaces et de recharger les images.
inconvénients....
La raison principale est que le débogage plein écran Applications DirectX est délicate. Accéder à la mémoire vidéo est fait par l'arrêt temporaire de Windows. Sauf si vous êtes à l'aise de travailler au niveau le plus bas, cela peut être une promenade dans SoftIce territoire, il n'existe aucun moyen sur terre, vous pouvez parcourir votre code entre une Serrure..déverrouiller paire. Un chemin de ronde, c'est d'utiliser un dump de la procédure pour ajouter des chaînes de paramètre dans un fichier journal, ou une fenêtre de débogage comme dans Gexperts.
Si vous savez C ou C de cours Microsoft fournira gratuitement une DirectDraw SDK avec de nombreux exemples et probablement le plus instructif fichier d'aide que j'ai jamais vu. Je recommande l'Intérieur de DirectX livre à partir de Microsoft press pour tous les renseignements de base sur DirectX. Microsoft Press ISBN: 1572316969. Une alternative livre est Windows Jeu de Programmation pour les Nuls par André Lamothe éditeur IDG Livres dans le Monde entier Inc ISBN: 0764503375, mais encore une fois c'est le C/C en fonction.
Delphix
après Avoir appris comment faire simple DirectDraw trucs en Delphi, vous avez maintenant un choix de développer vos propres composants ou utiliser celles définies pour vous - comme DelphiX. Je n'ai aucune connexion avec l'auteur à l'exception de l'admiration pour son excellent travail et sa générosité en la donnant. Si vous êtes nouveau à DelphiX, il peut être un peu écrasante, et je vous suggérons d'imprimer les exemples et démos et de les étudier en détail. Voici ma présentation sur l'utilisation.
Un TdxForm est une modification de forme qui doit être utilisé comme l'ancêtre de la forme, pas de TForm - il fait un peu de traitement de messages, y compris la gestion des exceptions et la commutation primaire de la surface de GDI si vous voyez des messages. Un DxDraw composant est tombé sur elle et les propriétés définies pour la résolution et profondeur de couleur. Cela a des gestionnaires d'événements à traiter avec de l'initialisation et de terminaison de l'objet. Ces gestionnaires sont où votre application doit faire son chargement des images et la préparation de la boucle de jeu.
La grande boucle de jeu est en fait une minuterie piloté par un gestionnaire d'événement. La minuterie garde la trace de tout décalage de sorte que vous pouvez voir si votre code est trop long à exécuter.
Il y a l'image et imagelist de composants qui vous permettent de configurer d'images bitmap au moment de la conception et vous pouvez spécifier le type de ram (PC ou Vidéo) les images sont placées.
& nbsp Un RestoreSurface gestionnaire est fourni afin que votre application peut recharger les images une fois que l'utilisateur Alt-tab, et perd la mémoire vidéo contenu.
La TDirectDrawSurface classe implémente juste au sujet de tous les DirectX fonctionnalité de surface. Les Surfaces peuvent être créés n'importe où, n'importe quelle taille et images blitted rapidement avec l'option mise à l'échelle et la rotation entre les surfaces. La plupart des cartes vidéo ont un matériel blitter et DirectDraw utilisera cette. Les Images sont rarement de forme rectangulaire, mais sont toujours définies dans un bloc rectangulaire. Un dessin de carte de routine attire 150 hexagones en moins de 4 ms c'est à dire chacun prend environ 26 secondes.
la Création d'un tampon d'arrière-plan est fait automatiquement si l'Dxdraw.Doflip option est à true. Notez que la sortie passe à l'arrière de la mémoire tampon dans ce cas, et vous ne verrez rien jusqu'à ce que dxdraw.flip est appelé. Si le doflip option est fausse, comme en cours d'exécution dans une fenêtre, la sortie va directement et vous n'avez pas besoin d'appeler dxdraw.flip (bien qu'il ne fait pas de mal).
Le Code de Radar.Exe.
En 370 lignes de code, j'ai écrit une petite simulation d'avions de voler dans des directions aléatoires - ce qui est très barebones fonctionnalité, donc ne vous attendez pas la détection de collision ou des explosions!. Les touches sont ESC pour quitter, ' A ' pour ajouter un avion et Alt-1, 2 ou 3 pour modifier à la hausse des résolutions d'écran de 640 x 480, 800 x 600 et 1024 x 768.
L'avion en trois couleurs différentes voler de façon aléatoire sur l'écran légèrement différentes vitesses et les roulements et certains se mettent à clignoter. Il y a 25 pour commencer mais maintenez enfoncée la touche A et le nombre augmente très rapidement. Les avions sont représentés par des rectangles entourant l'écran coordonne et ce texte est sortie par le Gdi TextOut routine ceci ralentit quelque peu. Pour voir l'effet de ce, à essayer avec 100 avions alors comment ces lignes ci-dessous dans la méthode tPlane.MovenDraw et de courir à nouveau. Tout ce qui sera affichée est la enfermant cadre. Ce qui est tiré par un peu de montage code que j'était juste pour montrer!
si fflashcount >=0 alors
& ! & ! & ! & nbsp avec fdxdraw.Surface.De toile,
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp pinceau.couleur := fcolor
& ! & ! & ! & ! & ! & ! & ! & nbsp str := inttostr(fx) inttostr(af)
& ! & ! & ! & ! & ! & ! & ! & nbsp textout(fx,fy,str)
& ! & ! & ! & ! & ! & ! & ! & nbsp release
& ! & ! & ! & ! & ! & nbsp fin
Notez que l'utilisation de la presse dans cette partie de code. C'est une méthode de TDirectDrawSurface et ça libère de la poignée de la sous-jacentes Contexte d'Affichage. Chaque fois que vous utilisez un appel Gdi, vous devriez appeler release.
Vous pouvez maintenant avoir beaucoup plus d'avions (bien des cadres rectangulaires) en douceur sifflant autour de l'écran. Sa vaut la peine d'essayer avec le retournement activé et désactivé pour voir quelle différence si tout qui fait.
Comment Ça marche.
une grande partie de l'âne travail est effectué en définissant des propriétés dans la DXDraw composant.- par exemple la résolution de l'Écran, plein écran ou en mode fenêtré, doFlip etc etc.
j'utilise un tstringlist de tenir tous les avions de l'objet. Ceux-ci sont créés au hasard des coordonnées et les directions de mouvement. Dans le timer gestionnaire, tous les avions sont déplacés à chaque trame par le hasard spécifié décalages x et y, rebondit sur les bords de l'écran. L'écran est vide et tous les aéronefs redessiné à chaque fois.
Le texte en haut à gauche montre combien d'avions sont sur l'écran et le gal. Normal décalage de la valeur est de 1. Tout est sortie dans une image. Si ça va à 2 ou plus (s'appuyant sur la touche A), le mouvement de l'avion devient saccadée comme il est plus long qu'une image de la période de tirage. Essayez d'éviter ce!
Le solde non utilisé-Étirage méthode s'appuie le cadre de rectangles en blanc et est très rapide. À la fois le présent et le solde non utilisé la méthode Drawrect sont de bons exemples d'accéder directement à la vidéo de la ram via Lock..Déverrouiller et les deux routines d'utiliser le pitch membre de la Surface Descripteur (dds) pour se déplacer vers le bas à partir d'un pixel de la ligne à la suivante.
Notes pour Delphi 4.0 et windows NT 4.0 Utilisateurs
Il existe deux versions de DelphiX disponibles et tous les deux vont travailler avec Delphi 3.0, le plus tôt on a un petit fichier Zip (606Kb). La seconde (841Kb) a une certaine Delphi 4.0 code spécifique (surcharge et les paramètres par défaut) et prend en charge DirectX 6, mais les programmes construits avec elle, ne fonctionnera PAS sous Win NT 4.0 au lieu de cela, vous obtiendrez le message d'erreur 'Interface non pris en charge'. Utiliser la version précédente dans ce cas.
& & & & & & & & & & -
Le fichier zip a la source des fichiers, mais pas le DirectX code. Il peut être téléchargé à partir de http://www.yks.ne.jp/'hori/DelphiX-e.html ou de divers autres endroits.
Le fichier de cet article peut être téléchargé ici ddraw.ZIP









En utilisant directdraw avec delphi


En utilisant directdraw avec delphi : Plusieurs milliers de conseils pour vous faciliter la vie.


Cela montre la façon de commencer a utiliser la bibliotheque DirectX en Delphi programmes et demontre une application simple a l'aide du freeware bibliotheque DelphiX.
Si vous avez deja essaye de faire ecran a la vitesse de sortie sous Windows, vous savez qu'il est pas une tache facile. Avec tous les trucs possible, il tombe encore lamentablement loin de commercial vitesses de jeu. Mais je vais vous montrer comment utiliser DirectX dans vos applications pour faire lisse sortie rapide qui peut etre programme en microsecondes pas minutes!
il y A quelques annees, Microsoft developpeurs rendu compte que Windows n'a pas ete une plate-forme de jeux et ils se sont engages a changer cela. En 1995, la courte duree de l'Aile est apparu. Cela a permis sortie rapide dans les modes 256 couleurs sur windows 3.1 et windows 95. Il etait rapide, mais limitee et bientot remplace par DirectX. C'est une famille d'Api pour rapide d'entree et de sortie. Vos applications peuvent utiliser des cartes video, cartes son et meme de la force de la retroaction des manettes de jeu par l'intermediaire de DirectX. Je vais regarder DirectDraw le visuel de l'API et de revenir aux autres dans l'avenir. D'autres Api DirectX inclure DirectSound pour les cartes son, DirectInput pour manettes de jeu, etc, de Direct3d pour les graphismes 3d et DirectPlay pour le multi-joueur. Bien que DirectX est maintenant a la version 6.1, DirectDraw a ete pratiquement inchange depuis la version 3. La Version 3 BTW est celui qui est integre dans Win NT 4.0.
Windows de la force, c'est qu'il travaille avec de nombreux differents moniteurs, cartes video et dans plusieurs resolutions et profondeurs de couleur. Cela necessite beaucoup de code entre votre Application et la carte video, de materiel et de cette 'Epaisseur Api' est pourquoi la sortie de Windows routines sont lents. C'etait egalement le cas avec le Dos quand il est apparu, et aux developpeurs de jeux est alle directement au metal, au lieu d'utiliser le BIOS ou DOS de routines API. Jusqu'a il y a deux ans, la plupart des jeux ont encore ete ecrit pour le Dos, meme celles qui s'executent sous Windows 95. Maintenant, probablement 99% de l'utilisation de DirectX et bientot, il semble que Windows CE micros sera conduite commerciale des bornes d'arcade de l'utilisation de DirectX.
DirectX/DirectDraw prend en charge une mince API approche avec quelques couches entre le materiel et votre Application. DirectX est construit sur COM, le Modele d'Objet Composant de sorte que les nouvelles versions peuvent etre liberes sans casser votre code existant. Si votre Application fonctionne avec DirectX version 5, il est garanti pour fonctionner avec DirectX 6, 7 ...308!
DirectDraw fournit des informations de votre Application sur le materiel dont dispose la video ou de la carte son a, et ce qui est emule dans le logiciel. Cette DirectX approche garantit que le logiciel fonctionnera sur des cartes non encore conçus et seront en mesure d'utiliser leurs fonctionnalites avancees. Sur le revers de la medaille, cela signifie que vous devez ecrire deux ou trois façons differentes de faire les choses et de choisir les meilleures (= rapide) methode au moment de l'execution.
DirectX et Delphi
Meme si C et C sont les principales langues de l'ifor DirectX, Delphi est tres bien adapte a l'ir. Blake Pierre a la premiere DirectX en-tete de la traduction de C a Delphi et Borland Charlie Calvert a brosse sur le sujet dans son Delphi 2/4 'Declenche' livres. M. Hiroyuki Hori au Japon developpe DelphiX - un excellent jeu de gratuit Delphi composants de DirectX. Ils sont disponibles dans de nombreux sites sur le Net ou de sa page d'accueil http://www.ingjapan.ne.jp/hori/. Vous aurez aussi besoin d'installer DirectX version 5 ou superieure. Vous avez probablement eu sur votre systeme si vous avez achete un jeu dans la derniere annee. Windows 98 et l'avenir NT5 venir avec DirectX construit en. NT 4, Service Pack 3 prend egalement en charge DirectX 3.0.
je vais maintenant vous montrer l'essentiel de DirectDraw de programmation et comment obtenir le meilleur de la DelphiX des composants avec un exemple d'Application. Si vous utilisez DelphiX, vous trouverez que M. Hori fichiers d'aide sont peut-etre pas limpide, mais vous obtenez le code source complet et a un certain nombre de bons exemples de programmes pour remedier a cela. DelphiX est un superbe logiciel et vous pourriez ecrire pres de arcade, jeux de qualite, de Delphes, de l'utiliser.

Meme si vous n'etes pas dans les jeux de programmation, la vitesse supplementaire que DirectDraw offre vous permet de creer des applications avec le scintillement d'une connexion haut debit de sortie comme le radar affiche, des oscilloscopes, le defilement des cartes etc. Je l'ai utilise pour un defilement de la carte et il attire un ecran de 256 couleurs hexagones resolution de 1024 x 768 (chaque hexagone s'inscrit dans un rectangle de 32 pixels de large par 34 profondeur) 26 ms sur un P2 300 equipe d'un AGP Matrox Millenium carte. C'est pres de 40 images par seconde, pas mal du tout pour Delphi..
En DirectDraw, Microsoft n'avez pas chucked le GDI. L'une des grandes douleurs de Dos de developpement du jeu a ete sortie de ce texte, en particulier d'avoir a creer vos propres polices de message ou de bitmaps. Heureusement, le GDI fonctionne avec DirectDraw, de sorte que les polices Truetype peuvent etre utilises. En fait, la plupart du GDI œuvres, aussi longtemps que un peu de soin est pris. Bien sûr GDI de sortie n'est pas tres rapide, de sorte que vous devriez vraiment utiliser pour la creation de texte, menus, etc ...
prise en main
Vous aurez besoin de DirectX fichiers d'en-tete - il n'y a pas de meilleur endroit que le DelphiX de la bibliotheque. Fournis Directx.pas est une tripotee de 300 ko en taille. Il comprend tous les DirectSound etc Api dossiers, Guid etc. Si vous vous demandez dans le desert de Gobi pour les cinq dernieres annees, vous avez peut-etre pas familier avec les Guid, mais ils sont simplement une collection de nombres comme ceci ['{5C690320-0BD2-11D3-89DF-00409545E8E7}'] qui identifie de maniere unique les objets et les classes dans Windows. Microsoft soigneusement mis GUID contenant vos cartes reseau' Adresse Mac dans tous les fichiers Word et Excel cree sur votre PC. Si vous faites Ctrl-Shift G en Delphi Ide, les 12 derniers chiffres de l'GUID generes sont vos cartes de reseau de l'Adresse Mac (si vous avez une carte reseau).
DirectDraw n'est pas difficile a utiliser, juste un peu delicat dans les lieux. Voici mes cinq point de guide pour les debutants pour commencer. Tout d'abord creer un objet DirectDraw. Cela represente une carte video/moniteur, et sous Windows 98 peut prendre en charge plusieurs peripheriques. C'est la definition de DirectDrawCreate.
fonction de DirectDrawCreate
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp (lpGUID: PGUID
hors lplpDD: IDirectDraw
& ! & ! & ! & nbsp pUnkOuter: IUnknown): HRESULT
Partout ou il y a un pUnkOuter parametre, il suffit de passer au neant. Cet appel doit retourner un DD_OK valeur (=0). Autre chose est une erreur et devrait etre gere par votre code..
la deuxieme Etape consiste a specifier la cooperative. Veut-il la totalite de l'ecran uniquement ou de le partager? La plupart des jeux en mode plein ecran afin que votre application peut choisir le mode de l'ecran et de la resolution a utiliser. Si vous l'utilisez dans une fenetre, votre application ne doit pas changer de mode.
La dwFlags parametre permet de preciser si vous utilisez le mode plein ecran ou pas, ou si votre application les controles de l'ecran si aucune autre application peut changer et meme si l'utilisateur peut Ctrl-Alt-Suppr pour redemarrer.
fonction de SetCooperativeLevel(hWnd: HWND dwFlags: DWORD): HRESULT
il est possible de demander l'objet DirectDraw pour tous les modes video pris en charge. La plupart des cartes video de soutien beaucoup de modes, mais la frequence la plus elevee/modes de couleur peuvent avoir besoin de plus de bande passante que votre moniteur peut faire face. La commutation de ces modes ne fonctionnent pas et pourrait quitter le moniteur dans un unsynched etat, assurez-vous d'inclure un avertissement lorsque vous distribuer vos applications! Mieux encore, obtenir a l'utilisateur de choisir le mode a partir d'une liste. Tremblement de terre, et beaucoup de jeux utilisent cette approche.
l'Etape 3 est de definir le mode de l'ecran. Cela s'applique uniquement si vous souhaitez d'acces a l'ecran.
fonction de SetDisplayMode(dwWidth, dwHeight, dwBpp: DWORD): HRESULT
dwBpp est le nombre de Bits par pixel, c'est a dire 8 de 256 couleurs. 640x 480 par 8 est probablement un pari sûr sur n'importe quel PC!
l'Etape 4 est ou les surfaces sont creees. Toutes les images sont detenus dans des surfaces. Ce sont juste des blocs de ram avec une option de palette et votre application peut creer des surfaces dans le PC principal du systeme de la ram ou de la carte video de ram. Aucun prix pour deviner que les images de la memoire video les images sont plus rapide pour copier de ram video, bien que les cartes AGP peut transferer des donnees a partir de votre PC ram tres rapidement.
CreateSurface cree une surface en fonction de la surface de la description de parametre.
fonction de CreateSurface(const lpDDSurfaceDesc: DDSURFACEDESC
& ! & ! & ! & ! & ! & ! & ! & nbsp hors lplpDDSurface: IDirectDrawSurface pUnkOuter: IUnknown): HRESULT
La surface principale represente l'ecran et est connu comme le Principal Surface. Mise a jour de cette directement, peut conduire a l'affichage raster de capture d'images comme ils sont tires. Cela donne un cisaillement ou de dechirure de l'effet et vous pouvez l'eviter en utilisant un autre bloc de memoire video comme un Tampon d'Arriere-plan. La Principale Surface est toujours affiche, mais votre application ecrit toujours dans la memoire tampon d'arriere, puis appelle le flip methode. Cela provoque la Primaire la Surface et a l'Arriere contenu de la memoire Tampon pour echanger les positions et de votre moniteur affiche maintenant la nouvelle image, C'est le secret de la douceur d'animation par ordinateur et peut arriver jusqu'a 70 fois par seconde.

Une Primaire de la Surface de 1024 x 768 en 256 couleurs et un tampon d'arriere-plan prend 1,5 Mo de ram video. Donc, une carte video avec 4 mo de video ram sera a seulement 2,5 Mo de gauche pour le stockage de vos images. Vous prefererez peut-etre allouer un bloc de memoire ram dans le PC principal de la memoire, de faire toutes les manipulations puis le copier dans la carte video de la surface pour etre affiche. Il existe de nombreuses techniques pour l'optimisation de la mise a jour de la vitesse et de la partie de l'amusement est de les essayer. Garder la trace des bits de l'ecran a change et que la copie bit est un moyen de minimiser la circulation. Le monde n'a pas l'AGP, donc vous devez tester votre application sur autant d'ordinateurs que possible.
C'est vraiment tout y est. L'etape 5 est assis a l'arriere et de la pensee - wow - je peux maintenant utiliser DirectDraw. Il y a quelques petites complexites comme l'obtention de vos images a partir des fichiers bitmap ou des ressources dans un DirectDraw surface. Le bitmap doit etre charge dans la memoire et ensuite copie dans la memoire tampon d'arriere.. Windows bitmaps contenir une palette et sont generalement stockes a l'envers. Vous pouvez vous amuser codage de ce vous-meme ou utiliser le DelphiX de la bibliotheque de composants pour les images bitmap et la gestion de la palette.
Acces Direct a la Video de Ram
Si votre Application a pour modifier directement les pixels en memoire video, alors vous devez specifier une zone rectangulaire, appel de verrouillage pour obtenir l'acces exclusif a la ram, de modifier ou de lire les pixels et enfin d'appel de deverrouillage pour le liberer. Le code de Verrouillage et de Deverrouillage doit etre court que Windows est arrete.
Regarder le Terrain!
Pas de son pas de parler de football. Chaque surface a un terrain. Son le reglage de la largeur en octets. Si vous manipulez des images au niveau de l'octet, vous devez etre conscient de cela. La hauteur d'une surface est souvent differente de la largeur. Chaque pixel de la ligne commence 'pitch' octets a partir de la precedente. Cela peut se produire parce que la largeur est un nombre impair d'octets et de la hauteur des tours jusqu'a la plus proche de mot double ou ses juste la façon dont la carte video n'. La largeur peut etre de 105 mais le pitch peut etre 108. La premiere ligne est de 0 octets a partir du debut, la prochaine 108, puis 216 et ainsi de suite.
GDI
en Utilisant le GDI n'est pas un probleme majeur. Le GDI est un peu coince dans ses manieres et utilise toujours le meme bloc de memoire video. Cela signifie qu'un systeme de message (comme une exception non geree) peuvent ne pas apparaître si vous utilisez de changement de page et l'affichage de l'autre bloc de ram. Cependant, vous pouvez appeler fliptoGDI a faire la primaire surface du GDI ou GetGDISurface pour obtenir un pointeur vers la surface de l'objet.


la perte de Donnees.
de Perdre des images dans la memoire video est un probleme mineur si l'utilisateur fait un Alt-Tab. Tout est perdu. Cependant DirectX conserve la trace de la 'perte' de statut de surfaces et de se donner une Surface Perdue ' d'erreur si vous essayez de l'utiliser. Votre application doit disposer d'un gestionnaire de recreer les surfaces et de recharger les images.
inconvenients....
La raison principale est que le debogage plein ecran Applications DirectX est delicate. Acceder a la memoire video est fait par l'arret temporaire de Windows. Sauf si vous etes a l'aise de travailler au niveau le plus bas, cela peut etre une promenade dans SoftIce territoire, il n'existe aucun moyen sur terre, vous pouvez parcourir votre code entre une Serrure..deverrouiller paire. Un chemin de ronde, c'est d'utiliser un dump de la procedure pour ajouter des chaînes de parametre dans un fichier journal, ou une fenetre de debogage comme dans Gexperts.
Si vous savez C ou C de cours Microsoft fournira gratuitement une DirectDraw SDK avec de nombreux exemples et probablement le plus instructif fichier d'aide que j'ai jamais vu. Je recommande l'Interieur de DirectX livre a partir de Microsoft press pour tous les renseignements de base sur DirectX. Microsoft Press ISBN: 1572316969. Une alternative livre est Windows Jeu de Programmation pour les Nuls par Andre Lamothe editeur IDG Livres dans le Monde entier Inc ISBN: 0764503375, mais encore une fois c'est le C/C en fonction.
Delphix
apres Avoir appris comment faire simple DirectDraw trucs en Delphi, vous avez maintenant un choix de developper vos propres composants ou utiliser celles definies pour vous - comme DelphiX. Je n'ai aucune connexion avec l'auteur a l'exception de l'admiration pour son excellent travail et sa generosite en la donnant. Si vous etes nouveau a DelphiX, il peut etre un peu ecrasante, et je vous suggerons d'imprimer les exemples et demos et de les etudier en detail. Voici ma presentation sur l'utilisation.
Un TdxForm est une modification de forme qui doit etre utilise comme l'ancetre de la forme, pas de TForm - il fait un peu de traitement de messages, y compris la gestion des exceptions et la commutation primaire de la surface de GDI si vous voyez des messages. Un DxDraw composant est tombe sur elle et les proprietes definies pour la resolution et profondeur de couleur. Cela a des gestionnaires d'evenements a traiter avec de l'initialisation et de terminaison de l'objet. Ces gestionnaires sont ou votre application doit faire son chargement des images et la preparation de la boucle de jeu.
La grande boucle de jeu est en fait une minuterie pilote par un gestionnaire d'evenement. La minuterie garde la trace de tout decalage de sorte que vous pouvez voir si votre code est trop long a executer.
Il y a l'image et imagelist de composants qui vous permettent de configurer d'images bitmap au moment de la conception et vous pouvez specifier le type de ram (PC ou Video) les images sont placees.
& nbsp Un RestoreSurface gestionnaire est fourni afin que votre application peut recharger les images une fois que l'utilisateur Alt-tab, et perd la memoire video contenu.
La TDirectDrawSurface classe implemente juste au sujet de tous les DirectX fonctionnalite de surface. Les Surfaces peuvent etre crees n'importe ou, n'importe quelle taille et images blitted rapidement avec l'option mise a l'echelle et la rotation entre les surfaces. La plupart des cartes video ont un materiel blitter et DirectDraw utilisera cette. Les Images sont rarement de forme rectangulaire, mais sont toujours definies dans un bloc rectangulaire. Un dessin de carte de routine attire 150 hexagones en moins de 4 ms c'est a dire chacun prend environ 26 secondes.
la Creation d'un tampon d'arriere-plan est fait automatiquement si l'Dxdraw.Doflip option est a true. Notez que la sortie passe a l'arriere de la memoire tampon dans ce cas, et vous ne verrez rien jusqu'a ce que dxdraw.flip est appele. Si le doflip option est fausse, comme en cours d'execution dans une fenetre, la sortie va directement et vous n'avez pas besoin d'appeler dxdraw.flip (bien qu'il ne fait pas de mal).
Le Code de Radar.Exe.
En 370 lignes de code, j'ai ecrit une petite simulation d'avions de voler dans des directions aleatoires - ce qui est tres barebones fonctionnalite, donc ne vous attendez pas la detection de collision ou des explosions!. Les touches sont ESC pour quitter, ' A ' pour ajouter un avion et Alt-1, 2 ou 3 pour modifier a la hausse des resolutions d'ecran de 640 x 480, 800 x 600 et 1024 x 768.
L'avion en trois couleurs differentes voler de façon aleatoire sur l'ecran legerement differentes vitesses et les roulements et certains se mettent a clignoter. Il y a 25 pour commencer mais maintenez enfoncee la touche A et le nombre augmente tres rapidement. Les avions sont representes par des rectangles entourant l'ecran coordonne et ce texte est sortie par le Gdi TextOut routine ceci ralentit quelque peu. Pour voir l'effet de ce, a essayer avec 100 avions alors comment ces lignes ci-dessous dans la methode tPlane.MovenDraw et de courir a nouveau. Tout ce qui sera affichee est la enfermant cadre. Ce qui est tire par un peu de montage code que j'etait juste pour montrer!
si fflashcount >=0 alors
& ! & ! & ! & nbsp avec fdxdraw.Surface.De toile,
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp pinceau.couleur := fcolor
& ! & ! & ! & ! & ! & ! & ! & nbsp str := inttostr(fx) inttostr(af)
& ! & ! & ! & ! & ! & ! & ! & nbsp textout(fx,fy,str)
& ! & ! & ! & ! & ! & ! & ! & nbsp release
& ! & ! & ! & ! & ! & nbsp fin
Notez que l'utilisation de la presse dans cette partie de code. C'est une methode de TDirectDrawSurface et ça libere de la poignee de la sous-jacentes Contexte d'Affichage. Chaque fois que vous utilisez un appel Gdi, vous devriez appeler release.
Vous pouvez maintenant avoir beaucoup plus d'avions (bien des cadres rectangulaires) en douceur sifflant autour de l'ecran. Sa vaut la peine d'essayer avec le retournement active et desactive pour voir quelle difference si tout qui fait.
Comment Ça marche.
une grande partie de l'ane travail est effectue en definissant des proprietes dans la DXDraw composant.- par exemple la resolution de l'Ecran, plein ecran ou en mode fenetre, doFlip etc etc.
j'utilise un tstringlist de tenir tous les avions de l'objet. Ceux-ci sont crees au hasard des coordonnees et les directions de mouvement. Dans le timer gestionnaire, tous les avions sont deplaces a chaque trame par le hasard specifie decalages x et y, rebondit sur les bords de l'ecran. L'ecran est vide et tous les aeronefs redessine a chaque fois.
Le texte en haut a gauche montre combien d'avions sont sur l'ecran et le gal. Normal decalage de la valeur est de 1. Tout est sortie dans une image. Si ça va a 2 ou plus (s'appuyant sur la touche A), le mouvement de l'avion devient saccadee comme il est plus long qu'une image de la periode de tirage. Essayez d'eviter ce!
Le solde non utilise-Etirage methode s'appuie le cadre de rectangles en blanc et est tres rapide. A la fois le present et le solde non utilise la methode Drawrect sont de bons exemples d'acceder directement a la video de la ram via Lock..Deverrouiller et les deux routines d'utiliser le pitch membre de la Surface Descripteur (dds) pour se deplacer vers le bas a partir d'un pixel de la ligne a la suivante.
Notes pour Delphi 4.0 et windows NT 4.0 Utilisateurs
Il existe deux versions de DelphiX disponibles et tous les deux vont travailler avec Delphi 3.0, le plus tot on a un petit fichier Zip (606Kb). La seconde (841Kb) a une certaine Delphi 4.0 code specifique (surcharge et les parametres par defaut) et prend en charge DirectX 6, mais les programmes construits avec elle, ne fonctionnera PAS sous Win NT 4.0 au lieu de cela, vous obtiendrez le message d'erreur 'Interface non pris en charge'. Utiliser la version precedente dans ce cas.
& & & & & & & & & & -
Le fichier zip a la source des fichiers, mais pas le DirectX code. Il peut etre telecharge a partir de http://www.yks.ne.jp/'hori/DelphiX-e.html ou de divers autres endroits.
Le fichier de cet article peut etre telecharge ici ddraw.ZIP


En utilisant directdraw avec delphi

En utilisant directdraw avec delphi : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation