Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
ags32 19/11/2008 19:58 | ags32 30/04/2011 11:38 version actuelle | ||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
Diverses commandes dans le nouveau langage de script nécessiteront que vous utilisiez des pointeurs. | Diverses commandes dans le nouveau langage de script nécessiteront que vous utilisiez des pointeurs. | ||
Cette section a été divisée en trois parties séparées pour vous expliquer les pointeurs | Cette section a été divisée en trois parties séparées pour vous expliquer les pointeurs | ||
- | en fonction de votre expérience précédente en programmation. -- selectionnez un des liens ci-dessous:\\ \\ | + | en fonction de votre expérience précédente en programmation. -- sélectionnez un des liens ci-dessous :\\ \\ |
- | [[#Pointers for programming newbies|Les Pointeurs pour les debutants ]] | + | [[#Les Pointeurs pour les débutants|Les Pointeurs pour les débutants]] |
- | [[#Pointers for people who know Java or C#|Les Pointeurs pour ceux qui connaissent Java ou C#]] | + | [[#Les Pointeurs pour ceux qui connaissent Java ou C#|Les Pointeurs pour ceux qui connaissent Java ou C#]] |
- | [[#Pointers for people who know C or C++|Les Pointeurs pour ceux qui connaissent C ou C++]] | + | [[#Les Pointeurs pour ceux qui connaissent C ou C++|Les Pointeurs pour ceux qui connaissent C ou C++]] |
---- | ---- | ||
- | ====Pointers for programming newbies==== | + | ====Les Pointeurs pour les débutants==== |
Les pointeurs peuvent être d'apparence décourageante, et dans des langages comme le C ou le | Les pointeurs peuvent être d'apparence décourageante, et dans des langages comme le C ou le | ||
C++, ils le sont ; mais AGS essaye de rendre les choses aussi simples que possible. | C++, ils le sont ; mais AGS essaye de rendre les choses aussi simples que possible. | ||
Ligne 20: | Ligne 20: | ||
Simplement, un pointeur est une variable qui // pointe // vers quelque chose d'un type particulier. | Simplement, un pointeur est une variable qui // pointe // vers quelque chose d'un type particulier. | ||
Par exemple, un pointeur // personnage (Character ) // va pointer vers un personnage. | Par exemple, un pointeur // personnage (Character ) // va pointer vers un personnage. | ||
- | Quel est l'intéret de tout cela, me direz vous? | + | Quel est l'intéret de tout cela, me direz vous ? |
Et bien, regardons en arrière AGS 2.62. Si vous vouliez référencer un hotspot particulier, | Et bien, regardons en arrière AGS 2.62. Si vous vouliez référencer un hotspot particulier, | ||
- | vous deviez vous rappeler son numero. Si vous vouliez basculer un objet sur On, vous deviez aussi | + | vous deviez vous rappeler son numéro. Si vous vouliez basculer un objet sur On, vous deviez aussi |
- | vous rappeler son numero. Et puisque vous pouviez par erreur utiliser un numéro d'objet là où | + | vous rappeler son numéro. Et puisque vous pouviez par erreur utiliser un numéro d'objet là où |
vous vouliez un numéro de hotspot, des erreurs pouvaient arriver facilement et ça devenait plutôt | vous vouliez un numéro de hotspot, des erreurs pouvaient arriver facilement et ça devenait plutôt | ||
embrouillé.\\ \\ | embrouillé.\\ \\ | ||
Ligne 29: | Ligne 29: | ||
pour identifier les éléments et en même temps ils fournissent // une vérification de type // évitant ainsi | pour identifier les éléments et en même temps ils fournissent // une vérification de type // évitant ainsi | ||
d'utiliser un hotspot là où vous pensiez utiliser un objet.\\ \\ | d'utiliser un hotspot là où vous pensiez utiliser un objet.\\ \\ | ||
- | Regardons un exemple. Si vous vouliez écrire une chaine de caractères dans un fichier en 2.62, vous feriez ceci : | + | Regardons un exemple. Si vous vouliez écrire une chaîne de caractères dans un fichier en 2.62, vous feriez ceci : |
int handle = FileOpen("temp.txt", FILE_WRITE); | int handle = FileOpen("temp.txt", FILE_WRITE); | ||
- | FileWrite(handle, "Test!"); | + | FileWrite(handle, "Test !"); |
FileClose(handle); | FileClose(handle); | ||
- | Plutot simple ; mais si vous vouliez ouvrir le fichier à un endroit et l'écrire à un autre? | + | Plutot simple ; mais si vous vouliez ouvrir le fichier à un endroit et l'écrire à un autre ? |
- | Vous deviez faire un // handle // une variable globale, puis vous rappeler que ce nombre | + | Vous deviez avoir recours à une variable globale, puis vous rappeler que ce nombre |
est un identifiant de fichier et non un identifiant de hotspot ou autre. | est un identifiant de fichier et non un identifiant de hotspot ou autre. | ||
Maintenant , en 2.7 ce code devient : | Maintenant , en 2.7 ce code devient : | ||
- | File *file = File.Open("temp.txt", eFileWrite); | + | File *fichier = File.Open("temp.txt", eFileWrite); |
- | file.WriteString("Test!"); | + | fichier.WriteString("Test !"); |
- | file.Close(); | + | fichier.Close(); |
- | Simple, n'est ce pas? La seule partie "confuse" est de s'habituer à | + | Simple, n'est-ce pas ? La seule partie "confuse" est de s'habituer à |
déclarer la variable en File* au lieu de int ; mais vous vous y ferez rapidement | déclarer la variable en File* au lieu de int ; mais vous vous y ferez rapidement | ||
et tous les exemples dans la documentation vous pointeront dans la bonne direction.\\ \\ | et tous les exemples dans la documentation vous pointeront dans la bonne direction.\\ \\ | ||
Regardons un autre exemple. Supposons que vous vouliez une variable contenant le hotspot | Regardons un autre exemple. Supposons que vous vouliez une variable contenant le hotspot | ||
- | que la souris survole. En 2.62, vous pourriez avoir un code comme ceci :this: | + | que la souris survole. En 2.62, vous pourriez avoir un code comme ceci : |
- | // top of global script | + | // haut du global script |
- | int mouseOverHotspot; | + | int sourisSurvoleHotspot; |
// repeatedly_execute | // repeatedly_execute | ||
- | mouseOverHotspot = GetHotspotAt(mouse.x, mouse.y); | + | sourisSurvoleHotspot = GetHotspotAt(mouse.x, mouse.y); |
- | Comment faire en 2.7? simplement : | + | Comment faire en 2.7 ? Simplement : |
- | // top of global script | + | // haut du global script |
- | Hotspot *mouseOverHotspot; | + | Hotspot *sourisSurvoleHotspot; |
// repeatedly_execute | // repeatedly_execute | ||
- | mouseOverHotspot = Hotspot.GetAtScreenXY(mouse.x, mouse.y); | + | sourisSurvoleHotspot = Hotspot.GetAtScreenXY(mouse.x, mouse.y); |
Mais attendez, et si vous vouliez savoir si la souris survole votre hotspot porte (disons | Mais attendez, et si vous vouliez savoir si la souris survole votre hotspot porte (disons | ||
- | le hotspot 2 ). En 2.62 vous feriez : | + | le hotspot 2). En 2.62 vous feriez : |
if (mouseOverHotspot == 2) { | if (mouseOverHotspot == 2) { | ||
- | Display("Mouse over the door"); | + | Display("La souris est sur la porte"); |
} | } | ||
Mais ça devient vite confus, parce que si vous changez le numéro d'hotspot de la porte, | Mais ça devient vite confus, parce que si vous changez le numéro d'hotspot de la porte, | ||
- | que ce passe t'il? Vous devriez alors vous rappeler de changer tous les 2 en 3 dans votre code. | + | que se passe-t-il ? Vous devriez alors vous rappeler de changer tous les 2 en 3 dans votre code. |
- | En 2.7 , vous feriez seulement ceci (en supposant que votre Hotspot a un script du nom de hDoor) : | + | En 2.7, vous feriez seulement ceci (en supposant que votre Hotspot a un script du nom de hPorte) : |
- | if (mouseOverHotspot == hDoor) { | + | if (mouseOverHotspot == hPorte) { |
- | Display("Mouse over the door"); | + | Display("La souris est sur la porte"); |
} | } | ||
- | Si vous êtes un fan des nombres pour d'étranges raisons, vous pouvez toujour faire ceci : | + | Si vous êtes un fan des nombres pour d'étranges raisons, vous pouvez toujours faire ceci : |
if (mouseOverHotspot == hotspot[2]) { | if (mouseOverHotspot == hotspot[2]) { | ||
- | Display("Mouse over the door"); | + | Display("La souris est sur la porte"); |
} | } | ||
Donc, ceci conclut notre introduction aux pointeurs. J'espère que vous avez compris ce qu'ils sont | Donc, ceci conclut notre introduction aux pointeurs. J'espère que vous avez compris ce qu'ils sont | ||
- | et à quoi ils servent. Si vous avez des questions, n'hésitez pas à poser des questions sur notre | + | et à quoi ils servent. Si vous avez des questions, n'hésitez pas à les poser sur notre |
forum technique.\\ | forum technique.\\ | ||
Ligne 93: | Ligne 92: | ||
---- | ---- | ||
- | ====Pointers for people who know Java or C#==== | + | ====Les Pointeurs pour ceux qui connaissent Java ou C#==== |
- | Les pointeur AGS fonctinnent comme les variables objet en Java et c#. La différence | + | Les pointeurs AGS fonctionnent comme les variables objet en Java et C#. La différence |
principale est que les pointeurs AGS sont déclarés comme en C avec une astérisque (*) | principale est que les pointeurs AGS sont déclarés comme en C avec une astérisque (*) | ||
pour représenter le pointeur. Donc : | pour représenter le pointeur. Donc : | ||
Ligne 105: | Ligne 104: | ||
Hotspot hs ; | Hotspot hs ; | ||
- | Dans AGS, les pointeurs sont utiliés pour pointer vers différents types prédéfinis comme | + | Dans AGS, les pointeurs sont utilisés pour pointer vers différents types prédéfinis comme |
- | les Hotspots, les éléments d'inventaire, les personnages , ainsi de suite. | + | les Hotspots, les éléments d'inventaire, les personnages, ainsi de suite. |
- | Comme AGS n'a pas de mot clé // new // il n'est pas possible de créer des pointeurs vers | + | Comme AGS n'a pas de mot-clé // new // il n'est pas possible de créer des pointeurs vers |
des types de structures personnalisées. \\ \\ | des types de structures personnalisées. \\ \\ | ||
Vous utilisez les pointeurs comme en Java ou en C#. Diverses méthodes statiques d'AGS retournent | Vous utilisez les pointeurs comme en Java ou en C#. Diverses méthodes statiques d'AGS retournent | ||
Ligne 115: | Ligne 114: | ||
Les exemples suivants sont tous valides : | Les exemples suivants sont tous valides : | ||
- | File *theFile = File.Open("test.dat", eFileWrite); | + | File *leFichier = File.Open("test.dat", eFileWrite); |
- | if (theFile == null) Display("It's null!"); | + | if (leFichier == null) Display("C'est null !"); |
- | File *file2 = theFile; | + | File *fichier2 = leFichier; |
- | if (theFile == file2) Display("They're the same file!"); | + | if (leFichier == fichier2) Display("Ce sont les mêmes fichiers !"); |
- | theFile = null; | + | leFichier = null; |
- | file2.WriteInt(10); | + | fichier2.WriteInt(10); |
- | file2.Close(); | + | fichier2.Close(); |
Si vous essayez d'appeler une méthode sur un pointeur null, une erreur va se produire (comme en | Si vous essayez d'appeler une méthode sur un pointeur null, une erreur va se produire (comme en | ||
Java ou en C#, vous auriez une exception).\\ \\ | Java ou en C#, vous auriez une exception).\\ \\ | ||
- | La gestion de mémoire des pointeurs dans AGS est automatique-- la mémoire est libérée | + | La gestion de mémoire des pointeurs dans AGS est automatique -- la mémoire est libérée |
- | quand il n'y a plus de variables pointant vers l'instance. Cepandant, si vous avez | + | quand il n'y a plus de variables pointant vers l'instance. Cependant, si vous avez |
une variable pointeur globale, il est conseillé d'initialiser ce pointeur à // null // quand | une variable pointeur globale, il est conseillé d'initialiser ce pointeur à // null // quand | ||
vous n'en avez plus besoin pour libérer la mémoire.\\ | vous n'en avez plus besoin pour libérer la mémoire.\\ | ||
Ligne 132: | Ligne 131: | ||
---- | ---- | ||
- | ====Pointers for people who know C or C++==== | + | ====Les Pointeurs pour ceux qui connaissent C ou C++==== |
Les pointeurs dans AGS sont basés sur la syntaxe C/C++, ils sont donc déclarés avec une astérisque ( * ). | Les pointeurs dans AGS sont basés sur la syntaxe C/C++, ils sont donc déclarés avec une astérisque ( * ). | ||
- | Cependant, dans AGS, les pointeurs sont utiliés pour pointer vers différents types prédéfinis, | + | Cependant, dans AGS, les pointeurs sont utilisés pour pointer vers différents types prédéfinis, |
mais il n'est pas possible de créer des pointeurs vers des types de structures personnalisées. \\ \\ | mais il n'est pas possible de créer des pointeurs vers des types de structures personnalisées. \\ \\ | ||
Les membres des pointeurs sont accessibles avec l'opérateur point ( . ) et non avec %%->%% , l'opérateur C. | Les membres des pointeurs sont accessibles avec l'opérateur point ( . ) et non avec %%->%% , l'opérateur C. | ||
Ligne 140: | Ligne 139: | ||
séparateur spécifique.\\ \\ | séparateur spécifique.\\ \\ | ||
Dans AGS, la gestion de mémoire des pointeurs est faite automatiquement sur la base d'un comptage | Dans AGS, la gestion de mémoire des pointeurs est faite automatiquement sur la base d'un comptage | ||
- | par reférence (sur le même pricipe que COM), il n'y a donc pas de mot clé // new // | + | par référence (sur le même principe que COM), il n'y a donc pas de mot-clé // new // |
ou // delete //. | ou // delete //. | ||
Quand un objet n'est plus référencé par aucune variable de pointeur, il est libéré. | Quand un objet n'est plus référencé par aucune variable de pointeur, il est libéré. | ||
Ligne 148: | Ligne 147: | ||
Les pointeurs AGS sont fortement typés et vous ne pouvez pas les passer d'un type à l'autre | Les pointeurs AGS sont fortement typés et vous ne pouvez pas les passer d'un type à l'autre | ||
comme vous le feriez en C ou C++. | comme vous le feriez en C ou C++. | ||
- | AGS vous autorisera uniquement à comparer ou à assigner des pointeurs du meme type ou | + | AGS vous autorisera uniquement à comparer ou à assigner des pointeurs du même type ou |
- | du meme type de base. Il existe un mot clé spécial // null // auquel tous les pointeurs | + | du même type de base. Il existe un mot clé spécial // null // auquel tous les pointeurs |
- | peuvent etre assignés ou comparés, vous indiquequant qu'ils sont désasigné\\ \\ | + | peuvent être assignés ou comparés, vous indiquant qu'ils ne sont plus assignés.\\ \\ |
Parce qu'il n'y a pas de mot clé // new //, vous ne pouvez pas créer d'instances d'objets, par contre | Parce qu'il n'y a pas de mot clé // new //, vous ne pouvez pas créer d'instances d'objets, par contre | ||
Ligne 157: | Ligne 156: | ||
comprendre comment les utiliser. | comprendre comment les utiliser. | ||
- | {{tag>français révision}} | + | {{tag>français}} |