Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
359 connectés actuellement
30734359 visiteurs depuis l'ouverture
1324 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
◂
| Conseils pour éviter les lags
Eviter un ralentissement ne se résout pas à placer un "attendre" ! Voici ce qu'il faut éviter et faire ! | Ecrit par Joke le 31/07/2008 |
▸
|
❤ 1Gari Ce tutoriel vous apprend à bien connaître ce qui ralentit vos jeux, et ce qu'il est possible de faire pour contrer certaines causes :
1-Bien placer ses "attendre"
2-Bien utiliser ses images
3-La technique de l'événement presque inactif lorsqu'il est hors de l'écran.
4-RM2000/2003, gare aux appui touche !
5-Avertir le joueur
Qu'est ce que le lag ?
Le "lag" est le terme employé pour désigner les ralentissement d'un jeu. Lorsqu'un événement est mal programmé, il peut ralentir le jeu jusqu'à le rendre injouable !
Qu'est ce qui produit du lag dans un jeu RPG maker ?
Il y a plusieurs source :
-Un événement en processus parallèle exécute des actions en boucle sans aucun "attendre" pour aérer.
-Commande "afficher image" utilisée trop souvent.
-Trop d'événements sur la carte.
-Trop d'appui touche différents qui s'interfèrent
1) Aérer un processus parallèle ?
Il faut éviter à tout prix d'avoir des processus parallèle sans "attendre" à l'intérieur !
Un "attendre 0.0sec" (ou "attendre 1 frame") peut largement suffire, mais le plus élevé sera le mieux (mais certains codes peuvent être inefficace s'ils ne sont pas assez rapide (un événement pour détecter des collisions, par exemple))
Ne pas oublier le "attendre", c'est bien, mais encore faut-il savoir le placer !
Certains se disent "wé il y a un attendre 0.1sec à la fin de tous mes événements, ça va pas ralentir du tout !"
Sauf que certains utilisent des boucles et étiquettes ! Et lorsqu'il y a un code qui tourne en boucle grâce à une boucle ou des étiquettes, il faut pas oublier de placer un "attendre 0.0sec" quelque part dans cette boucle !
Donc si vous utilisez des jeux d'étiquettes, regardez bien si le code ne se met pas en boucle quelque part sans qu'il y ait de "attendre" !
Cela dit on peut faire volontairement une boucle sans "attendre" ! Sachez que contrairement à un événement processus parallèle qui tourne en boucle, une vraie boucle tourne 1000x plus rapidement.
Ça peut permettre d'effectuer un code 100x en une seconde !
Et ça ne fait pas lagguer si par exemple au bout de 100 tours on sort de la boucle !
Je n'ai pas d'exemple simple, cette technique est bonne pour des codes réfléchis genre pour classer des variables de la plus grande à la plus petite, ou autre...
En tout cas c'est s'il n'y a jamais de "sortir de la boucle" ou qu'il y a "sortir de la boucle" qu'au bout d'un long moment que ça va tout ralentir ! Mais si la boucle doit se terminer en une fraction de seconde, ça va !
2) Les images font lagger ?
Je crois que pour RMXP et VX, l'affichage des images n'est pas un problème !
Mais dans RM2003 ça je le sais bien : C'est une grosse m**** pour afficher les images !!
Vous pouvez bien faire un long calcul avec une tonne de variables et conditions méchantes, des boucles et tout : Ce qui fera le plus mal à votre code après les absence d'"attendre", c'est les affichages d'images !
Certains pensent que RPG maker laggue lorsqu'il y a trop d'images affichées à l'écran, moi je pense que c'est totalement faux, une fois qu'elles sont affichées, aussi nombreuses qu'elles soient, elles ne vont pas faire lagguer le jeu !
C'est l'action "afficher image" lui-même qui fera lagger votre jeu ! Alors il faut le contrer le plus possible !
Alors par exemple, vous avez un menu en images, il y aura des fenêtres et curseurs qui apparaisseront puis disparaitront, des trucs qui clignotent...
Eh bien le mieux sera d'afficher toute les images du menu au début, certaines masquées par "transparence 100%" (ou "opacité 0", dans RMXP et V et celles affichées en "transparence 0%" (ou opacité 255 dans XP/V et lorsque vous ferez apparaître ou disparaître une fenêtre, vous le ferez avec "déplacer image" plutôt que "afficher image/supprimer image" !!
C'est important !
Par exemple, une image de neige qui fait que descendre à l'écran, vous serez tenté de faire ce code en boucle :
1
2
3
4
5
|
/// DÉCONSEILLÉ DE FAIRE :
afficher image "neige" << On remet l'image à sa place
déplacer image "neige" 10sec (attendre activé) << On descend l'image
|
A chaque fois, le "afficher image" remet l'image au point de départ pour créer une illusion d'infini !
Ben non il serait préférable de faire ceci :
1
2
3
4
5
6
7
8
|
/// CONSEILLÉ DE FAIRE :
afficher image "neige"
BOUCLE :
déplacer image "neige" 10sec (attendre activé) << On descend l'image
déplacer image "neige" 0sec (attendre activé) << On remet l'image à sa place
FIN DE BOUCLE
|
Le code ne paraissait pas trop grave vu que le déplacement aérait le code de 10secondes ! Ce serait pas grave du tout effectivement si l'image n'était pas lourde, mais si l'image est grande et lourde... Bonjour le ralentissement toute les 10 secondes !
3) Trop d'événements sur la carte ?
Saviez vous que lorsqu'il y a une tonne d'événements (plus de 300), même seulement en "appui touche" sur une carte, ça ralentissait le jeu ??
Et bien il n'y a rien à faire contre ça, malheureusement ! ^^" (Enfin pour XP et VX il y a des codes apparemment, mais ça ne marche pas toujours, il parait) Ce qu'il faut faire c'est éviter de tapisser vos sols d'événements ! (genre pour des traces de pas ou autre trucs !)
Donc 300 événements en "appui touche" peut faire ralentir un peu, mais alors 300 événements en "processus parallèle" ça a alors, ça tue le jeu !! Genre un mario-like, ou une grande map de A-RPG, ça nécessite souvent que tous les monstres soient tous en processus parallèle, ou des coffres ou buissons en processus parallèles... etc...
Mais que ce soit des buissons soulevables, des boites ouvrable en sautant dessus, ou des monstres... Ceux qu'on a besoin de voir tourner, dans le jeu, sont ceux qui sont à l'écran !
Effectivement on s'en fout des monstres et objets en dehors de l'écran, ils peuvent être inactif ! Et c'est faisable ! ...ou presque !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
modifier variable "X" coordonnée X écran de "cet événement"
modifier variable "Y" coordonnée Y écran de "cet événement"
condition si "X" supérieur à -30
condition si "Y" supérieur à -30
condition si "X" inférieur à 350 (320+30)
condition si "Y" inférieur à 270 (240+30)
<>code de l'événement en question
<>attendre 0.0sec (ou ce qu'on veut, c'est le temps qui sera en boucle lorsque l'événement sera dans l'écran)
<>stopper cet événement (pour revenir au début du code)
fin
fin
fin
fin
attendre 0.5sec (ou ce qu'on veut, c'est le temps qui sera en boucle lorsque l'événement sera hors de l'écran)
|
Et voilà, là c'est pour RPG maker donc j'ai utilisé 320 et 240, mais par exemple sur XP on utiliserait -30, 670 (640+30), 510 (480+30) !
Avec ce code, on contrôle si l'événement est dans l'écran, si c'est le cas, il effectue bien son code et se termine avec un "stopper cet événement" pour ne pas que le "attendre 0.5sec" soit actif
Si les conditions ne sont pas remplie, le code de l'événement n'a pas lieu et il n'y a que le "0.5sec" qui tourne en boucle, ce qui ne fera pas lagger du tout.
Grâce à ces conditions ajoutées, vous n'aurez plus peur d'afficher une centaine d'événement processus parallèle sur vos grandes map !
Ça laggera juste s'il y a beaucoup d'événements dans le cadre de l'écran, ceux hors du cadre ne seront pas actif, eux !
4) (RM2k/2k3) Trop de commandes "appui touche" ?
Dans l'exemple de buissons soulevable ou autres événements que vos représenterez plusieurs fois, vous serez tenté de mettre à l'intérieur de chacun "demander l'appui d'une touche". Ou bien dans un mini-jeu ou CBS, vous seriez aussi tenté de faire cette commande en boucle sur plusieurs événements en processus parallèle.
Eh bien apparemment, c'est aussi une commande qui fait lagger !
Si vous êtes obligé de cocher "attendre l'appui de la touche", vous êtes bien obligé de mettre la commande, mais si vous ne cochez pas "attendre l'appui de la touche" vous pouvez très bien mettre cette détection de touche dans un événement fréquent (commun) en processus parallèle ! (avec un "attendre 0.1sec" pour ne pas lagger)
Alors dans vos codes vous ne ferez que les condtions "si variable "touche directionnelles" =4" sans avoir à mettre avant la commande "demander l'appui d'une touche" !
C'est mieux de mettre dans l'événement fréquent une démande d'appui touche pour les touches directionnelles, puis une différente pour la touche entrée, puis une autre pour la touche maj, puis une autre pour le pavé numérique... Car ça permettra de détecter si vous appuyez sur deux touches en même temps (genre sur gauche en même temps que entrée) ce qui ne serait pas possible avec toute les touches cochée en un seul "appui touche" !
5) Trop d'applications ouvertes ? x)
N'importe quel jeu, il ne faut pas avoir emule, window media player, etc qui tourne à fon à côté lorsqu'on joue !
Alors vous, bandes de joueurs, si vous jouer à un jeu qui lag, arrêtez le bouzin qui est en court à côté sur votre PC !
Alors vous, les créateurs, vous pouvez aussi avertir au début de votre jeu qu'il est préférable de quitter les applications en cours pour profiter du jeu sans avoir de ralentissements !
Place aux questions pour ceux qui n'ont pas compris, aux astuces pour ceux qui en ont d'autres !
Bilou !
|
Monos -
posté le 31/07/2008 à 23:41:05 (57322 messages postés)
| Vive le homebrew | Hum j'aime bien le derniers paragraphe.
Sinon vraiment interressant. Même pour moi.
|
Signer du nez ? |
falco -
posté le 01/08/2008 à 00:18:30 (19777 messages postés)
- | Indie game Developer | J'ai testé toute ces techniques avec des projets de Joke, et croyez moi, c'est efficace !
|
Inexistence Rebirth - Inexistence - Portfolio |
Lolow -
posté le 01/08/2008 à 00:53:42 (5646 messages postés)
| Homme a tout faire... | Bon boulot Joke !
|
OmegaBowser -
posté le 01/08/2008 à 10:53:18 (3330 messages postés)
| | Excellent tuto.
Dans ton 3ieme point, tu dis que la map laggue avec beeeaauucoup d'évènements, or dans mon cas, mes maps contiennent en général entre 2 et 6 min et max (sauf dans le cas d'enigmes ou les evenements sont plus d'une dizaines). Et des fois elles laguent....
Pareil pour mon CBS, il lag alors qu'il n'a pas plus de 15 evenements en tout avec des wait 0.1. 'Fin bon c'pas grave, je verrai par moi et ta technique.
|
Viens voir des petits poneys |
Joke -
posté le 01/08/2008 à 11:08:12 (5090 messages postés)
| Bilouteux fou | ben regarde tes événements fréquents (commun) si tu en as, il y en a ptet un qui fait tout lagguer, et les "attendre" c'est pas parce qu'il y en a qu'il n'y en a pas un d'oublié quelque part^^ Si un de tes lag n'a pas pour cause une de celles que j'ai cité, ce sera bizare ! Ou ça viendrait de ton PC ou de ton RPG maker !
En tout cas c'est sûrement pas à cause du nombre d'événements, je dis bien qu'il en faut beaucoup pour que le nombre puisse être cause de ralentissements^^
Peut-être l'utilisation d'mp3 volumineux aussi ?
Moi sur RMXP j'ai un méga lag avant chaque chargement de midi, c'est soit mon PC ou mon RMXP qui foire, pas la façon dont j'ai joué la BGS ou SE.
Bilou !
|
biloumaster.fr, mon joli site ouèb tout bô tout frai ! |
Zam -
posté le 01/08/2008 à 14:05:47 (5541 messages postés)
- | | Eh bien, Sylvanor!!!! Fais lire ça a tes p'tits chinois afin que ton jeu tourne bien sur tout les PC.
|
Tricky -
posté le 25/08/2008 à 16:28:19 (205 messages postés)
| | Super tuto, très utile pour les jeux avec des maps de donjons et les villes avec des effets d'éclairages amovibles!
|
Alioune -
posté le 04/11/2009 à 11:40:52 (25 messages postés)
| | Très bon tuto! Ca résout presque tous les lags.
|
Heavy Rain -
posté le 26/07/2010 à 12:25:59 (1053 messages postés)
| | Ouais, franchement pratique
|
ctuchik -
posté le 27/08/2010 à 15:01:01 (58 messages postés)
| Statue? En marbre de préférence | Merci, un event commun en démarrage auto avec plus de 70 conditions (dont parfois 3 à vérifier en même temps) une frame d'attente avant et après chaque condition, ça marche niquel .
|
Je ne fais pas d'autographe désolé |
Joke -
posté le 29/05/2012 à 18:41:57 (5090 messages postés)
| Bilouteux fou | P'tite analyse pour RM2003 :
Boucle :
120000 tours par seconde
Boucle+0.0sec :
60 tours par seconde
Etiquette :
147500 tours par seconde
Etiquette+0.0sec :
60 tours par seconde
Automatique :
60 tours par seconde
Automatique+0.0sec :
60 tours par seconde
Parallèle :
60 tours par seconde
Parallèle+0.0sec :
30 tours par seconde
|
biloumaster.fr, mon joli site ouèb tout bô tout frai ! |
Luryio -
posté le 05/08/2012 à 02:46:15 (5 messages postés)
| | Hum, je sais pas si je me trompe mais sur rpg maker xp on ne peut pas attendre 0,1 ou n'importe quel nombre décimal.
Et moi j'ai un problème de lag avec une animation d'effet de lumière sur un évenement, et mette attendre, même une frame, ben ça fait pas terrible le clignotement pour un chandelier.
Edit: En fait c'est bon, je pense que ça devait être à cause de mon animation qui n'avait qu'une seule frame, j'en ai mis dix et ça m'a l'air mieux quand même.
J'en déduit que les animations à une frame ne sont pas très gentilles avec le logiciel .
|
Joke -
posté le 22/01/2014 à 19:48:51 (5090 messages postés)
| Bilouteux fou | Pour information, 0.0sec sous RM2003 correspond à 1 frame sur les versions plus récentes (et dans RM2003 aussi en fait, ça fait 0.0 sec = 1 frame = un soixantième de seconde puisque c'est du 60 FPS).
Si 1 seconde fait 60 frame, 0.1 seconde fait 6 frames, mais on s'en fout.
On peut aussi dire que si on aligne six "attendre 0.0 sec" sous RM2003, ça équivaut à un "attendre 0.1 sec".
Ça aussi on s'en fout, si ce n'est qu'il faut retenir que si on veut faire un temps plus court que 0.1 sec on peut très bien aligner plusieurs "attendre 0.0 sec".
Le nombre de "attendre 0.0 sec" qu'on aligne donc c'est le nombre de frame attendue, si on veut attendre 4 frames, on aligne 4 "attendre 0.0 sec".
Si on veut attendre 6 frames... on utilise "attendre 0.1 sec".
Si on veut attendre 8 frames... On aligne un "attendre 0.1 sec" avec deux "attendre 0.0sec".
Et voilà, on peut avoir un "attendre" dans RM2003 aussi précis que dans les versions plus récentes.
|
biloumaster.fr, mon joli site ouèb tout bô tout frai ! |
Nina888 -
posté le 15/01/2018 à 20:12:42 (117 messages postés)
| | J'ai un probleme de lag avec une boucle sur MV :
Je place des effets qui s'activent quand on active un bouton inusité (page suivante dans mon cas) qui permet de switcher d'une équipe à l'autre (5 dans ce cas précis et j'utilise un plugin pour ça qui vient de HimeWorks pour créer et switcher les équipes ... )
J'ai mis un truc sur les persos principaux et dans un effet de boucle, ils sont en lag tandis que les 3 groupes de pnj, eux bouge normalement quand c'est leur tour ....
Pouvez vous m'indiquer comment je doit faire pour que ça passe normalement ...
Pour info je fait comme ça :
agis en parallèle dans l'event
Variable équipe = 1
Boucle
Si je presse sur page suivante
si variable équipe = 1
changer variable équipe =2
attendre 5 frame
script : switch (2)
sinon:
si variable équipe = 2
changer variable équipe =3
attendre 5 frame
script : switch (3)
sinon: (ext...)
et ça fini :
si variable équipe = 5
changer équipe = 1
attendre 5 frame
script : switch (1)
Continuer boucle si dessus
Voilà pour le truc, comment je doit m'y prendre pour que ça passe bien svp ?
|
Gari -
posté le 25/05/2021 à 19:31:00 (5901 messages postés)
- | | Citation: Je crois que pour RMXP et VX, l'affichage des images n'est pas un problème ! |
Bah en fait... si, apparemment, c'est possible que ça pose problème.
Petite théorie (fumeuse, mais pas tant que ça) : quand une image est affichée, elle est sauvegardée dans la mémoire du pc comme fichier temporaire (aussi appelé cache).
Avec quelques images pas de souci, le pc va rien sentir. Quand vous effacez une image, celle-ci ne disparaît pas du cache (en soi c'est un preload que le pc n'a pas besoin de recharger, c'est normal). Cependant, si le jeu a beaucoup d'images différentes, c'est autant de ressources qui se retrouvent dans le cache. Résultat : au bout d'un certain temps de jeux, vous vous retrouvez avec une pile d'images préloadées et qui ne reserviront pas forcément.
Etant donné qu'il y a eu un problème récemment sur VX Ace de crash de jeu (vous pouvez consulter le topic ici pour plus de détails), voici une petite portion de code pour purger ces fichiers de temps à autre dans votre jeu si vous chargez beaucoup d'images (par exemple plus de 100), en appel de script :
Cache.clear
|
gif -
posté le 25/05/2021 à 20:35:54 (4782 messages postés)
- | Egotrip Gigamaxé | Conseil : ne pas prévoir 5 trilliards d'images sinon ca va laaaggg
A+ pour d'autres conseils
|
Itch.io | Twitter | Une IA qui génère des sprites de Pokémon | Cochouchou à la coupe du monde ! | le concours hebdomadaire du meilleur screen ! | |
|
|