Vous n'êtes pas identifié.
Voila j'ai commencé à optimisé Chess, qui en a grandement besoin...
Mais j'aimerais quelques conseils pour pouvoir optimiser au maximum...
merci...
Hors ligne
euh lol ben... utilise des variables "register" dans tes fonctions
par exemple register int i;
en fiat la variable le plus utilisée sera conservée dans un registre.
et puis... essaye de remplacer les multiplications par des décalages
par exemple: truc = i * 320;
équivaut à: truc = i << 6 + i << 8;
sinon tu peux toujours me demander pour l'ASM tu me demandes de convertir un fct C en asm (gain de vitesse garanti)
mais bon pourtant tu dois savoir optimiser non ??
Hors ligne
ca reste quand meme un peu vague ce que tu dis swifter.
Dans l'optimisation il y a:
-Enlever du code inutile
-Essayer de convertir du c en asm (moins vrai sur les nouveau compilo)
Ensuite deux solutions sont possibles essayer d'optimiser la vitesse ou la place prise par le code ou encore optimiser l'évolution du logiciel (la programmation object avec C++ par exemple)
-Si tu décides d'optimiser la vitesse il se peut que ton code devienne plus gros, à l'inverse optimiser la place mémoire peut rendre ton code moins performant.
Dans GComm g mélangé les deux, ainsi l'affichage et la gestion des menus bénéficient plutot d'un opti memoire tandis que l'écriture sur la flash, menu, envoi/recpetion sont optimisés en rapidité.
Mais d'abord dans un premier temps je te conseil de ne pas utiliser des méthodes de dos.h ou autre lib de C si tu en as pas vraiment besoin ou alors que tu px facilement recoder. Ceci peut t'apporter un gain de memoire et de vitesse.
Hors ligne
si le compilo à ses options par défaut, pas besoin de mettre register, c'est automatique
l' optimisation:
-un backup au cas ou!!
-chess=jeu d' echec=pas besoin d' une super opti de vitesse mais de mémoire!
-mémoire: conversion en asm évidemment(avantage: gain de vitesse aussi )
-suppresion d' argument(technique qui up la vitesse mais down aussi la mémoire) exemple dans mon prog je vois ceci:
drawsprite(X,Y,lesprite,SEG1);
...
drawsprite(X,Y,unautresprite,SEG1);
...
drawsprite(X,Y,ultimesprite,SEG1);
en gros, virer SEG1 car c'est totalement inutile, et c'est induit souvent par les librairies!
Sinon sur BTOUR, j' ai ceci comme appel souvent:
drawsprite64(ptrproj->x,ptrproj->y,Xsprite);
ptrproj est la structure pour les projectiles.
x et y de cette structure sont multiplié par 64, et sont déssiné en fonction de 2 variables xecran et yecran qui determine le scrolling!
si j' avais appelé directement la routine drawsprite:
drawsprite(ptrproj->x>>6-xecran,ptrproj->y>>6-yecran,Xsprite);
bah plus de mémoire utilisée lol, et pour la vitesse ça doit augmenter sensiblement!
Pour optimiser, il faut ruser, et passer par des détours des fois
Autre méthode: au lieu de mettre ceci par exemple:
drawstring(10,16,"Salut");
drawstring(10,22,"Ca va?");
faites plutot ceci si vous en avez une tonne:
struct textt
{
char x;
char y;
char *text;
} atexttab;
struct atexttab textetab[]=
{
10,16,"Salut",
10,22,"Ca va?",
};
void drawstring2(unsigned char letexte)
{
drawstring(textetab[letexte].x,textetab[letexte].y,textetab[letexte].texte);
}
Avantages:
°Quand ya une tonne de texte c'est super efficace!!
°Traduction simple!!
°ptet d' autres
Défauts:
°Dur de changer la position du texte!
°On voit pas forcément le texte ciblé dans drawstring(0); par exemple ( a moins de mettre des #define TEXT_SALUT 0 par exemple)
°ptet d' autres
l' atout c'est d' avoir de l'imagination
Hors ligne
lol...j'avais oublier de préciser en effet que c'était pour une optimisation de code car la taille de l'exe augmente très vite...
sinon oui je sais quoi optimiser (tous ces affichages de graphismes)...mais en fait j'ai posté ce sujet pour voir s'il n'y a pas des détails ou méthode d'opti que je n'oublie pas...
je risque d'adopter une methode x-thunder...lol
merci pour tous les conseils
Hors ligne
Essaie peut-etre de rassembler des fonctions similaires en une seule... Par exemple pour activer/desactiver le mode DB, et regler le contraste en meme temps, moi je fais ca:
void modevideo(bool on) { static u_char cont_init=get_cont(); // contraste initial asm { cmp on,false je mode_off mov al,0xdb // active le mode DB mov dl,18 // contraste a 18 jmp mode_set } mode_off: asm { mov al,0xc3 // restaure le mode C3 mov dl,cont_init // remet le contraste initial } mode_set: asm out 0x2,al; contrast(_DL); }
Comme ca (X-th sera content ) le contraste initial est automatiquement préservé, et on doit aps garder de variable globale pour l'enregistrer etc...
pour activer le mode, on passe true a la foncx, et pour desactiver on renvoie false (bien sur )
Hors ligne
moi jte dis pour bien optimiser bah fo travailler avec des structures (voire classes ) et l'optimisation est super simple !!
Hors ligne
Oui, c clair que la prog orientée objet est qd meme bien puissante pour écrire de bons programmes...
(en fait honnetement si on me demandait de faire un Chess sans classes et sans structures, je crois que j'aurais du mal :? )
Hors ligne
Au fait c'est un probleme de taille de l'exe ou de taille totale? parce que si c parce que tu as peur d'avoir un exe trop gros, essaie de mettre le plus de données (les sprites surtout) dans des fichiers externes, et tu recharges ces fichiers dans la mémoire au début du jeu (en memzone de préférence )
Aussi, évite de coder tes sprites sur 3 couches (masque + couche avant + couche arriere), on peut tres bien les compacter en 2 couches, le gain de place est assez important et l'affichage est même un peu plus rapide!
Hors ligne
non, fichiers externe :mrgreen:
Julien si tu veux des méthodes je peut t' en donner lol
Le C++ prend par lui meme un peu plus de place que le C...
dans le C les structures sont suffisantes pour faire des bons jeux :mrgreen:
a vouais swifter: tu me demandais pourquoi je faisait mes menus en dernier: t' a la réponse devant toi :mrgreen:
Hors ligne
Julien si tu veux des méthodes je peut t' en donner lol
mes propres méthodes me suffisent jusque ici :P
Hors ligne
lol...d'ailleurs je risque de passer Chess en c++...
car je pense que pour l'IA j'aurai besoin des listes liées...remarque si je fais deux exe seul un exe aura besoin d'etre en c++...
sinon pour le stockage des divers graphismes j'avais pensé le faire en dernier recours, si l'optimisation ne suffit pas...
Hors ligne
bin en fait comme g fais les graphismes de chess en premier il y a plus d'un an, je ne les ai pas stockés comme ca...maintenant j'ai la flemmme et ce sera uniquement en dernier recours...
(bon arrete de te foutre de ma gueule hujikol)
Hors ligne
non il se foutais de la gueule de casiomax je crois!!
dsl julien, c'est un lapsus je voulait dire swifter :mrgreen: ;
Hors ligne
bin en fait comme g fais les graphismes de chess en premier il y a plus d'un an, je ne les ai pas stockés comme ca...maintenant j'ai la flemmme et ce sera uniquement en dernier recours...
J'ai fait un Sprite Maker pour sonic, qui convertit tt seul les images bmp en sprites de dimension quelconque, il suffit de glisser le ou les bmp vers le prog et de faire un copier-coller des tab créés
Seulement comme je l'ai déjà dit
- c'est ma méthode personnelle de compression, y'en a d'autres
- y'a que ma fonction drawsprite() qui sait les lire!
Tout ça sera dans les sources de sonic, tu pourras reprendre ça si ca t'intéresse...
... A moins de te faire toi-meme un sprite maker pour le mode de compression que tu veux, c plus marrant de se créer un prog comme ca que de passer son temps à convertir des images à la main non?
Hors ligne
heu hujikol tu c fo bien lire le post de swifter pr cprendre le mien ...
Hors ligne