Se connecter

Informatique

Création de Jeux

Sujet : J'aide les personne dans Game maker
lemuass
Niveau 2
22 février 2019 à 12:06:12

Merci ça fonctionne!
Et sinon t'as clairement raison sur le fait que le système de drag and drop est très limité, mais je n'ai absolument aucune base en programmation, et même si gm est un outil pour les débutants, je ne saurai pas programmer quoi que ce soit dessus.
Mais je vais tenter de suivre ton conseil, il y a pas mal de sites d'introduction au gml, je vais tenter d'y apprendre deux trois trucs. :merci:

chopsueys
Niveau 16
22 février 2019 à 12:43:40

Un conseil entraine toi avec des choses simples, essaye de comprendre la logique d'une variable puis des conditions pour créer des algorithmes et n'oublie pas qu'il existe une doc qui liste absolument tout ce qu'il y a à savoir sur GM et le gml (il faut aller dans l'onglet aide pour l'ouvrir et elle est trouvable en Fr sur internet aussi normalement.)

C'est plus simple qu'il n'y parait, au final le D&D n'est qu'une retranscription graphique de ce qu'il se fait en gml, ça reste la même logique, c'est juste plus intuitif quand on débute mais rapidement ça devient ingérable.

Pour ton exemple voici la traduction en gml dans l'évènement step (évènement de base le plus utile qui se contente de lire ce qu'il contient à chaque frame du jeu) :
(les // servent en programmation à ajouter des annotations informatives dans le code)

if keyboard_check(vk_left){  // si la touche gauche est enfoncé 
    //  alors tout ce qui est placé entre les { } sera exécuté par le programme
       x-= 4;  // la position sur l'axe x de l'objet est décrémenté de 4 pixels
}
if keyboard_check(vk_right){  // même chose pour les autre touches
       x+= 4;
}
if keyboard_check(vk_up){
       y-= 4;
}
if keyboard_check(vk_down){
       y+= 4;
}

if keyboard_check_pressed(vk_left){   // si la touche gauche est pressé 
        sprite_index=tonsprite;  // alors on assigne le nom du sprite voulu à la variable sprite_index
        image_index=0; // l'index de l'animation commence au début (image 0)
        image_speed=tavitesse; // on définie la vitesse de l'animation; 
}

if keyboard_check_pressed(vk_right){
        sprite_index=tonsprite;
        image_index=0;
        image_speed=tavitesse
}
if keyboard_check_pressed(vk_up){
        sprite_index=tonsprite;
        image_index=0;
        image_speed=tavitesse
}
if keyboard_check_pressed(vk_down){
        sprite_index=tonsprite;
        image_index=0;
        image_speed=tavitesse
}

lemuass
Niveau 2
22 février 2019 à 13:14:38

Ptn merci, tes explications sont ultra claires et les // dans ton code m'aident vraiment à le comprendre, je vais faire comme tu dis et utiliser le doc fourni par GM pour apprendre ce langage. J'imagine que ça va me prendre pas mal de temps pour à peu près le maîtriser, mais ce sera sympa de vraiment pouvoir coder un jeu (quand j'utilise le drag and drop j'ai l'impression de tricher).
Et toi, t'utilises quoi pour coder? Perso, j'ai aussi tenté unity mais j'avais pas compris qu'il fallait savoir coder.
Encore merci :cimer:

lemuass
Niveau 2
22 février 2019 à 13:30:40

Ah et sinon pour stopper l'animation du personnage quand il s'arrête, j'ai écrit ça:
}
if keyboard_check_released(vk_left){
sprite_index=pghimmobile
image_index=0;
image_speed=0.2
}
if keyboard_check_released(vk_right){
sprite_index=pdrimmobile
image_index=0;
image_speed=0.2
}
if keyboard_check_released(vk_up){
sprite_index=phautimmobile
image_index=0;
image_speed=0.2
}
if keyboard_check_released(vk_down){
sprite_index=pbase
image_index=0;
image_speed=0.2
}
ça fonctionne, mais quand j'appuie sur plus de deux flèches en même temps et que j'en relâche une, mon perso arrête son animation et il glisse comme un demeuré.
Je saisis pourquoi il fait ça (parce que si je release une touche le programme le fait changer de sprite), mais je vois pas comment je peux faire pour qu'il ne fasse pas ça.
T'aurais une idée de comment je peux faire?

chopsueys
Niveau 16
22 février 2019 à 13:40:06

Le 22 février 2019 à 13:14:38 lemuass a écrit :
Ptn merci, tes explications sont ultra claires et les // dans ton code m'aident vraiment à le comprendre, je vais faire comme tu dis et utiliser le doc fourni par GM pour apprendre ce langage. J'imagine que ça va me prendre pas mal de temps pour à peu près le maîtriser, mais ce sera sympa de vraiment pouvoir coder un jeu (quand j'utilise le drag and drop j'ai l'impression de tricher).
Et toi, t'utilises quoi pour coder? Perso, j'ai aussi tenté unity mais j'avais pas compris qu'il fallait savoir coder.
Encore merci :cimer:

Ben en fait je ne fais plus de programme / jeux depuis quelque années mais là je suis en train de m'y remettre pour le web j’apprends le javascript.
Au final apprendre le gml c'est vraiment bien pour commencer il est assez simplifié mais en même temps il intègre toute la base de la programmation comme les variables, les tableaux, les boucles, les conditions, les fonctions.. donc c'est très utile en suite pour apprendre un langage un peut plus sérieux.

Le 22 février 2019 à 13:30:40 lemuass a écrit :
Ah et sinon pour stopper l'animation du personnage quand il s'arrête, j'ai écrit ça:
}
if keyboard_check_released(vk_left){
sprite_index=pghimmobile
image_index=0;
image_speed=0.2
}
if keyboard_check_released(vk_right){
sprite_index=p​ersonne bien eduquéerimmobile
image_index=0;
image_speed=0.2
}
if keyboard_check_released(vk_up){
sprite_index=phautimmobile
image_index=0;
image_speed=0.2
}
if keyboard_check_released(vk_down){
sprite_index=pbase
image_index=0;
image_speed=0.2
}
ça fonctionne, mais quand j'appuie sur plus de deux flèches en même temps et que j'en relâche une, mon perso arrête son animation et il glisse comme un demeuré.
Je saisis pourquoi il fait ça (parce que si je release une touche le programme le fait changer de sprite), mais je vois pas comment je peux faire pour qu'il ne fasse pas ça.
T'aurais une idée de comment je peux faire?

Oui c'est pour ça que je disais que ce n'étais pas vraiment la bonne façon de faire mais je ne voulais pas en rajouter trop pour ne pas te perdre. Je vais essayer de te faire un code plus complexe avec des annotations.

chopsueys
Niveau 16
22 février 2019 à 16:23:12

Bon difficile de me remettre dans le bain, j'ai plus galéré que ce que je pensais https://image.noelshack.com/fichiers/2018/13/6/1522514698-risitassueurz.png

Le code est encore améliorable car il n'intègre pas par exemple la notion de collision.

A toi de modifier dans mon code le nom des sprites et les valeurs de vitesse le coefficient etc pour que ça colle à ton projet.
Tu noteras que je n'utilise que 4 sprites car j'utilise l'image 0 de mon animation pour la position à l'arrêt du personnage.
Donc fait en sorte que ce soit le cas dans ton animation.

choses à savoir:
les variables sont comme des boites nominatives dans lesquels on enferme des informations.
Exemple, si je dis munitions=120 alors à chaque fois que j'écris munitions dans le code le programme lira 120.
Mais si je modifie munitions entre temps il lira la nouvelle valeur (le programme li le code comme nous de haut en bas et de gauche à droite donc l'ordre du code à une importance)
. >= veut dire plus grand ou égal (<= pour plus petit ou égal)
== le double égal est utilisé pour tester une égalité dans une condition. Le = simple est utilisé pour affirmer une égalité
exemple : est-ce que munitions == 120 ? n'est pas pareil que munitions = 120

Dans l’événement create tu vas écrire ceci pour initialiser toute les variables:

sprite_index = spr_bas; // initialise le sprite utilisé par défaut puis sa vitesse et son image de départ 
image_index=0;
image_speed=0;


coef= 2; // coefficient de vitesse d'animation
// par rapport à la valeur de la vitesse actuelle
acc = 0.05; // accélération, valeur à modifier selon tes préférences (une accélération ou décélération >= à v_max annulera toute impression de transition dans la vitesse )
dec = 0.06; // décélération
v_max = 4; // vitesse max
vg = 0; // vitesse gauche
vd = 0; // vitesse droite
vh = 0; // vitesse haute
vb = 0; // vitesse basse

En suite dans step:

// ici on va demander au programme d'incrémenter ou décrémenter les variables de vitesses en fonction des touches qui sont enfoncées.
 if keyboard_check(vk_left){ // si la touche gauche est maintenue enfoncée 
sprite_index = spr_gauche; // alors le sprite est = au sprite spr_gauche
vg+=acc; // et vg est incrémenté de la valeur de acc (donc à chaque frame de maintient de la touche, vg gagne 0.05)
}
else {vg-=dec;} // sinon, si la touche n'est pas enfoncée alors vg est décrémenté de la valeur de dec (décélération)

if keyboard_check(vk_right){ // on recommence pour les autres touches
sprite_index = spr_droite;
vd+=acc;
}
else {vd-=dec;}

if keyboard_check(vk_up){
sprite_index = spr_haut;
vh+=acc;
}
else {vh-=dec;}

if keyboard_check(vk_down){
sprite_index = spr_bas;
vb+=acc;
}
else {vb-=dec;}

// ici on va donner des limites au variables vg vd vh et vb 
if vg >= v_max {vg=v_max} // si vg est plus grand ou égal à v_max (donc 4) alors vg est = à v_max (il lui est donc impossible de dépasser cette valeur)
if vg <= 0 {vg=0} // même chose pour ne pas descendre en dessous de 0
if vd >= v_max {vd=v_max}
if vd <= 0 {vd=0}
if vh >= v_max {vh=v_max}
if vh <= 0 {vh=0}
if vb >= v_max {vb=v_max}
if vb <= 0 {vb=0}

// Ici on force l'image de l'animation à correspondre au personnage à l'arrêt lorsque sa vitesse est nul dans toute les directions
if vg<=0 and vd<=0 and vh<=0 and vb<=0 { // si vg vd vh et vb sont plus petits ou = à 0 (j'aurais pu écrire == 0 mais le <= assure une sécurité en plus)
image_index=0; // alors l'image de l'animation est celle du personnage à l'arrêt 
}

// ici on va définir la vitesse de l'animation en fonction de la vitesse réel du personnage à l'aide des variables de vitesses et du coefficient. Ainsi la vitesse d'animation suit la courbe d’accélération et il n'y a même pas besoin de préciser que image_speed = 0 quand on ne se déplace plus ça le fait automatiquement
if sprite_index == spr_gauche {image_speed = vg*coef;} // si le sprite actuel correspond au sprite spr_gauche et donc si notre perso est tourné vers la gauche, alors la vitesse de l'animation est = à vg * 2
if sprite_index == spr_droite {image_speed = vd*coef;}
if sprite_index == spr_haut {image_speed = vh*coef;}
if sprite_index == spr_bas {image_speed = vb*coef;}

// ici on utilise les variables de vitesse pour modifier réellement la position de l'objet avec les variables prédéfinie x et y (ce sont des variable inhérentes au langage comme image_speed etc)
Donc par à la 1ere frame où on appuie sur la touche, notre personnage se déplace de 0,05 pixels (en réalité il ne bouge pas vue que c'est plus petit que 1) puis à la 2eme frame  0.10 etc ce qui créé une impression d'accélération. 
x-=vg;
x+=vd;
y-=vh;
y+=vb;
chopsueys
Niveau 16
22 février 2019 à 16:47:27

J'ai appris le gml avec ce tuto http://cbna.forumactif.com/t10919-tutoriels-apprendre-le-gml ça devrait bien t'aider

lemuass
Niveau 2
22 février 2019 à 17:52:27

Eh ben! Je sais pas comment te remercier pour ce travail que tu viens me refiler comme ça, gratos!
Ton code est hyper intéressant, et il marche parfaitement pour moi! Même après avoir suivi le tuto que tu viens de m'envoyer, je pense pas pouvoir faire mieux que ça! En tout cas, merci de t'être occupé du petit noob que je suis et de m'avoir appris tout ça, c'est vraiment cool de ta part! Pour ce qui est des collisions, je vais tenter de me débrouiller moi-même et j'ai trouvé pas mal de tutos pour ça sur le net, genre lui: https://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/collision_rectangle.html
je vais de ce pas vers le tuto que tu m'as refilé, merci encore!
:gni:

chopsueys
Niveau 16
22 février 2019 à 18:18:05

Le 22 février 2019 à 17:52:27 lemuass a écrit :
Eh ben! Je sais pas comment te remercier pour ce travail que tu viens me refiler comme ça, gratos!
Ton code est hyper intéressant, et il marche parfaitement pour moi! Même après avoir suivi le tuto que tu viens de m'envoyer, je pense pas pouvoir faire mieux que ça! En tout cas, merci de t'être occupé du petit noob que je suis et de m'avoir appris tout ça, c'est vraiment cool de ta part! Pour ce qui est des collisions, je vais tenter de me débrouiller moi-même et j'ai trouvé pas mal de tutos pour ça sur le net, genre lui: https://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/collision_rectangle.html
je vais de ce pas vers le tuto que tu m'as refilé, merci encore!
:gni:

De rien, ça faisait longtemps que je n'avais pas aidé quelqu'un sur GM et ça me manquait de recréer ce genre de petit programme :noel:
Pour les collisions il faut que je te mette en garde c'est un peu plus complexe que ça, tu vas devoir utiliser ce qu'on appelle des boucles.
En fait le problème que tu va rencontrer sans les boucles c'est que ton perso va s'encastrer dans les murs ou s'arrêter trop tôt, ce ne sera pas des collisions propres pixel contre pixel.
Et c'est logique en fait tu vas par exemple dire, si la place est libre à 1 pixel devant moi alors je peux avancer.. sauf que tu vas avancer peut être de 5 pixels d'un coup et donc si l'obstacle se trouve à 2 pixels tu vas t'encastrer dedans de 3 pixels.
La boucle va permettre de tester plusieurs fois l'espace libre en une seul frame. Donc pour une vitesse de 5px par frame tu vas tester 5fois 1px devant et avancer en conséquence.
Je t'en dit pas plus pour que tu cherches et comprenne par toi même je te met juste sur la piste.. parce que ça m'avait fait m'arracher les cheveux à l'époque ^^
Et colision_rectangle n'est pas utile normalement pour les déplacement tu utiliseras plutôt place_free(x,y) pour tester la présence d'objets définient comme solides.

lemuass
Niveau 2
25 février 2019 à 15:23:03

Pour l'instant je suis sur la partie des tableaux de valeurs et je dois relire 3 fois pour comprendre, je sens que je vais galérer à fond. Sinon, tu sais comment mettre le jeu en 60 fps et faire en sorte qu'il soit le plus beau possible? J'utilise GM 8 pro edition mais ce que je fais c'est pas joli j'ai l'impression (même si je pense que ça doit surtout venir de mon talent limité en dessin)

chopsueys
Niveau 16
25 février 2019 à 16:52:27

Le 25 février 2019 à 15:23:03 lemuass a écrit :
Pour l'instant je suis sur la partie des tableaux de valeurs et je dois relire 3 fois pour comprendre, je sens que je vais galérer à fond. Sinon, tu sais comment mettre le jeu en 60 fps et faire en sorte qu'il soit le plus beau possible? J'utilise GM 8 pro edition mais ce que je fais c'est pas joli j'ai l'impression (même si je pense que ça doit surtout venir de mon talent limité en dessin)

Ouais c'était assez compliqué pour moi aussi les tableaux je me rappel.. au final maintenant je n'arrive plus à comprendre ce que je trouvais de compliqué :hap:
Tu veux un éclaircissement ?
Pour régler les fps ça se décide dans les options de la room. Par défaut il me semble que c'est bloqué sur 30, tu vas dans l'onglet settings et tu devrais trouver "speed".
Tu va pouvoir régler la résolution pour augmenter la qualité également... c'est assez particulier et je ne me rappel plus bien.
Dans l'onglet view de la room tu vas avoir le choix entre plusieurs emplacement de paramètre de caméra (par défaut tu es sur la caméra 0) pour l'activer et la rendre visible au démarrage tu dois cocher "enable the use of views" et "visible when room start"
En suite tu vas pouvoir régler les option de "view in room" et "port on screen" c'est là où je ne me rappel plus bien.. il me semble que port on screen va définir la taille de la fenêtre et view in room la taille de la caméra.. donc il faut que les 2 valeur normallement soit identique à part si tu veux faire un effet de zoom ou dézoom.
Essaye par exemple avec du 1080 x 1920 et normalement quand tu passera en pleins écran la qualité sera meilleur.
Tu vas pouvoir changer la façon de lancer l'affichage du jeu (plein écran, étendu etc) dans ressources => change global games settings => graphics
Il me semble que je côchais aussi "interpolate color between pixels"

lemuass
Niveau 2
25 février 2019 à 17:25:52

Merci pour les fps, ça change vraiment tout de passer de 30 à 60 :fete:
pour la caméra j'ai bidouillé dans tous les sens c'était drôle et au final j'ai compris comment ça marchait
ah et pour la résolution c'est chelou la meilleure que GM me propose c'est 1600*1200
(j'ai tenté de mettre une image ça a pas marché mdr j'ai passé 10 min de ma vie à la mettre sous différents formats pour tenter de l'envoyer)
Bon après je dis ça mais la qualité de mes images doit pas vraiment dépasser le 1600*1200 pour l'instant j'essaie surtout d'apprendre le gml et de faire fonctionner mon jeu
du coup j'ai terminé la première grande partie de la formation gml (c'était vachement intéressant) et j'ai à peu près compris tout ce qu'il écrivait, même si il y a des mots comme xor que je vois vraiment pas quand utiliser.
Je vais pas tarder à m'attaquer aux collisions, donc attends toi à me voir revenir pas content parce que j'aurai pas réussi :desole:
je pense utiliser les groupes repeat et for pour faire les test de pixels dont tu parlais.
Pour les collisions, on a besoin du mot "break"?

chopsueys
Niveau 16
25 février 2019 à 18:05:07

ah et pour la résolution c'est chelou la meilleure que GM me propose c'est 1600*1200

Oui effectivement, maintenant que tu le dit ça me revient. GM 8.0 est un vieux logiciel maintenant, je pense que si tu veux une plus haute résolution il faudra passer sur la version studio 2.. je te conseil dans tous les cas de passer sur cette version car elle te garantira une compatibilité plus récente et te permettra des meilleurs performances de calcul.

J'ai jamais utilisé xor, c'est vraiment pas indispensable :hap:

je pense utiliser les groupes repeat et for pour faire les test de pixels dont tu parlais.

Bonne idée.
Oui tu peux utiliser break pour tester des collisions.
Break tu l'utiliseras surtout si tu créé un algo à l'intérieur de ta boucle et que tu veux stopper la lecture de la boucle si une certaine condition est validée. Ça permet de libérer de l'espace de calcul pour ne pas lire des itérations de boucles inutiles. (ça permet aussi de stopper une boucle while pour ne pas qu'elle s'embale dans une boucle infini dans certains cas)
Par exemple si dans ta boucle tu testes si la place est libre à x+1 alors l'objet avance de 1, tu pourras spécifier un break dans la condition "else"
En gros, si la place est libre 1 pixel devant j'avance de 1 sinon on stoppe la boucle car ça ne sert plus à rien de la terminer.

lemuass
Niveau 2
28 février 2019 à 13:45:15

Re! désolé de pas avoir répondu, j'étais tellement à fond sur GM studio 2 que j'en ai oublié ce forum :desole:
alors là, j'étais pas prêt! GM studio 2 est vraiment bien plus agréable que mon ancienne version, et coder dessus est bien plus simple, le guide est mieux foutu et les erreurs sont mieux détectées!
Je me suis pas encore attaqué aux légendaires collisions, mais je me suis amusé à faire en sorte que mon appli soit un apk, du coup je me suis mis en tête de faire un jeu simple pour mobile, ça me plait carrément!
Du coup, grâce au guide de GM studio 2, j'ai trouvé comment on faisait des touches virtuelles sur mobile, et là je suis en train de chercher quel jeu simpliste je pourrai faire. Si ça te dérange pas, je viendrais direct ici si j'ai un pb avec certains trucs (c'est le seul endroit où j'ai trouvé de l'aide lol). Merci encore de m'avoir appris que GM studio 2 existait, j'aurais eu l'air con de passer 6 mois sur un petit jeu tout ça pour me retrouver avec un truc en 1600*1200 :rire2:

[Myster]
Niveau 7
19 mars 2019 à 12:18:33

Bonjour,

Quelqu'un sait pour que quand deux touches ne sont pas appuyé ça affiche une seule fois un message et pas en boucle ?

J'ai essayé quelque chose comme ça



if !(keyboard_check(vk_right)) && !(keyboard_check(vk_left))
{
	show_message("Teste");
}

Le soucis c'est que ce message s'affiche en boucle, donc si quelqu'un a une idée pour qu'il se déclenche une seule fois, je vous en remercie !

chopsueys
Niveau 16
19 mars 2019 à 12:28:17

Le 19 mars 2019 à 12:18:33 [Myster] a écrit :
Bonjour,

Quelqu'un sait pour que quand deux touches ne sont pas appuyé ça affiche une seule fois un message et pas en boucle ?

J'ai essayé quelque chose comme ça



if !(keyboard_check(vk_right)) && !(keyboard_check(vk_left))
{
	show_message("Teste");
}

Le soucis c'est que ce message s'affiche en boucle, donc si quelqu'un a une idée pour qu'il se déclenche une seule fois, je vous en remercie !

Salut, tu peux utiliser une variable comme condition que tu désactives juste après, exemple:

if !(keyboard_check(vk_right)) && !(keyboard_check(vk_left)) && active_message == 1
{
    show_message("Teste");
    active_message = 0;
}

Il faut bien sûr que tu déclares la variable à 1 dans l’événement create

[Myster]
Niveau 7
19 mars 2019 à 12:34:16

Bonjour,

J'ai essayé mais sans succès, j'ai fait une maquette de mon jeu sur Construct 2, que je souhaite du coup implanter sur Gamemaker, donc ceci:

https://www.noelshack.com/2019-12-2-1552995198-capture.png

Mais le petit soucis, c'est que bah si je met ça directement dans le step, et bien dès que je lache la touche droite ou la touche gauche le player se stop direct au lieu de continuer à rouler jusqu'à ce qu'il s'arrête tout seul quoi ^^

chopsueys
Niveau 16
19 mars 2019 à 12:41:41

Je comprend pas.. c'était pas pour afficher un message ?
Explique très clairement ce que tu veux faire stp.
L'astuce que j'ai donné avec la variable fonctionne très bien pour l'utilisation que tu as demandé.

[Myster]
Niveau 7
19 mars 2019 à 13:01:31

Oui pour le premier système ça fonctionne parfaitement, sauf que j'ai voulu m'inspirer de ton exemple pour mon système de déplacement, mais ça n'a pas l'air de fonctionner,

Comme l'image que j'ai montré ci-dessus

Si la touche droite n'est pas appuyé
Si la touche gauche n'est pas appuyé
Décencher une seule fois
Velocity = 0

Voilà ce que j'essaye de faire, mais ça fonctionne pas du tout :/

lemuass
Niveau 2
19 mars 2019 à 19:18:03

Oui pour le premier système ça fonctionne parfaitement, sauf que j'ai voulu m'inspirer de ton exemple pour mon système de déplacement, mais ça n'a pas l'air de fonctionner,

Comme l'image que j'ai montré ci-dessus
Si la touche droite n'est pas appuyé
Si la touche gauche n'est pas appuyé
Décencher une seule fois
Velocity = 0
Voilà ce que j'essaye de faire, mais ça fonctionne pas du tout :/

ma question peut paraître débile mais tu as bien fait en sorte que la variable velocity corresponde a la vitesse actuelle de ton perso?
Sinon, je pense pas que faire une variable qui passe à zéro pour s'arrêter est une bonne idée (après ça dépend ce que tu veux faire mais tu donnes si peu d'infos que je vois pas comment marche ton code :snif: )
Si tu veux un bon exemple de code pour se déplacer remonte sur cette page chopsueys en a fait un super bien avec de la décélération et tout :p)
après je dis tout ça mais je suis un noob en gml, si tu cherches l'aide de quelqu'un de doué attend l'intervention de chopsuey, il gère (mais donne quand même plus d'infos sur ce que tu veux, si c'est un platformer 2d ou un jeu vu du dessus ce sera pas exactement la même chose)

Sujet : J'aide les personne dans Game maker
   Retour haut de page
Consulter la version web de cette page