bah si ca l´est je sais toujours pas quelles libs tu utilises mais avec directdraw tu as les fonctions Blt et BltFast qui copient une zone ( rectangle) vers une autre ( rectangle)
J´utilise pas de librairie genre OpenGL et DirectX pour la simple raison que c´est censé être un jeu pour ti89 ( la honte : )
J´ ai donc que stdio, stdlib quelques autres et c´est tout !
( Bon je fait ca pour me détendre entre le C++ )
mais sinon globalement les " secrets" de la 2D c´est de ne modifier et calculer que ce qui change et de conserver tout ce qui ne change pas : ) donc c peut être pas non plus très utile de transférer tout un écran s´il n´y a qu´une petite partie qui a changé...
Ouai, mais si tu fait un scrolling, tu déplace l´écran tout le temps, donc faut tout recalculer à chaque fois.
Au début de la partie, ca va, mais après quelques heures de jeu, ca risque d´ètre long pour déplacer l´écran de quelques pixels sur le côté.
merci je comprend mieux maintenant
Je sais c´est pas simple.
bah en fait non faut pas forcément tout déplacer...
je connais pas la ti89 mais as tu des possibilités concernant l´adressage vidéo ? peux tu changer toi même l´adresse de départ de l´affichage ?
Je ne pense pas que tu puisse changer l´adresse de départ de l´affichage, mais tu peux faire une copie sur la variable de l´écran. Mon problème, c´est que la variable écran est un tableau de 1 dimension, autrement dit, pour copier ce qui m´interesse, il faut que je copie une partie ( 1 ligne), puis que je saute jusque à la prochaine ligne.
Bin toute les mémoires sont linéaires : ) même sur PC les fonctions s´arrangent en général pour rendre le truc transparent donc quand tu appelles une fonction genre DrawPixel(x,y,rgb) elle fait elle même la conversion Ecran[x + y*width]=rgb
Doit bien y avoir quelques trucs sur le net concernant la ti89 non ? des trucs de scrolling etc... Je connais pas non plus ses capacités mais il doit bien y avoir des trucs cablés en hardware.
en tout cas c une question interessante pour une fois : )
Ouai, faudra que j´aille y faire un tour.
L´un d´entre vous à déja essayé le C# ?
Imprssion ?
Cemélange de basic et de c++ a l´air bizarre.
non pas encore, les trucs qui viennent de Microsoft j´ai pris pour habitude d´attendre la version 47 avant de m´y intéresser.. trop de bugs dans les versions précédentes : ) Alors tout un langage, j´ose même pas y toucher !
C´est bien vrai : D, mais sa me navre car de nouveaux programmeurs risquent de tomber dans le piège et prendre l´habitude du C# ce qui risque d´augmenter la puissance de microsoft comme l´a fait DirectX pour le secteur des jeux video.
On peut toujours revenir au C++ après, mais le feront ils.
Nakeri tu fais du C aussi ?
A mon avis ca risque pas d´arriver étant donné que la plupart des formations se font sur unix et donc en C ou C++ ( du vrai). Et pour ceux qui apprennent par eux mêmes bin, faut faire gaffe en effet.
Mais pour les jeux vidéo DirectX n´est pas un langage juste une librairie pour Windows. Le langage par excellence était, est et restera le C/C++ ( sur les consoles tu n´as rien d´autre, à part l´assembleur bien sur). Les librairies sont celles du constructeur ou les tiennes généralement et donc tu es à l´abri de Crosoft : ) à part peut être pour la Xbox lol
Oui c´est une librairie ( je l´avais pas précisé ) , mais il n´empêche que si y a plus aucun jeu sur mac, c´est bien pour ca.
Seules certaines personnes qui utilisent OpenGL ( John Carmack ) portent leurs programmes ( quand ils le veulent). C´est une des forces des moteurs créés par ID Software : ils sont portables.
Mais Microsoft tente d´élargir sa zone d´influence et il faut tout de même se méfier. Pour l´instant on rigole, mais restons sur nos gardes.
Il est 22h30, le forum dort.
Bonsoir et a demain.
oui, moi je fait du C/C++.par contre le C#, je sais pas pourcoi mais je le sent pas, g pas l´impression que ça attire beaucoup de monde...
C# : beurrrrk, les pointeurs n´existent presque plus... snif, finit cette arme à double tranchant! D´un coup, tu pouvait manipuler directement la mémoire, de l´autre, foutre en l´air ton programme =)
Enfin, ´reste toujours les références...
" Je reprends.
Comme tu le sait, ce qui est affiché à l´écran est stocké dans un tableau ( ex : ecran[3840] )
J´ai créé un tableau qui est environs 4 fois plus grand que la variable de l´écran et qui renferme le monde à afficher ( sous fome de 0 ( pixel éteint) et de 1 ( allumé).
Comme il est plus grand que l´ écran ( le monde ) , je ne peut pas tout afficher à la fois, il faut donc que je copie une partie du monde sur la variable de l´écran pour l´afficher.
Exemple :
11111111111111111111111111111111111111111111
1__________________________________________1
1___________________1111111111111111111____1
1___________________1_________________1____1
1___________________1_________________1____1
1___________________1_________________1____1
1___________________1_________________1____1
1___________________1111111111111111111____1
1__________________________________________1
11111111111111111111111111111111111111111111
Le grand carré représente le monde et le petit représente l´écran.
Comment faire pour copier la zone spécifique du monde à afficher dans la variable écran sans passer par une boucle fort qui risque d´être un peu lente ?
Je sais c´est pas clair mais c´est dur à expliquer."
Ca me semble pas si complexe que ça:
-Déjà, si ton monde est en 1 dimension, et est automatiquement CarriageReturn-é, ça me semble plutot facile:
-Considérons que la width de l´écran est la variable ´n´, cad le nombre de charactères que ta calculatrice peut afficher dans une ligne, et ´m´, le nombre sur une colonne:
-´l´ est la longueur du monde, en caractères, cad:
________________________ l _________________
______ n __________
11111111111111111111111111111111111111111111
1__________________________________________1
1111111111111111111________________________1 |
1_________________1________________________1 |
1_________________1________________________1 |
1_________________1________________________1 m
1_________________1________________________1 |
1111111111111111111________________________1 |
1__________________________________________1
11111111111111111111111111111111111111111111
Ensuite, disons que tes coordonnées sont 30, 67 selon ton monde, on a juste à faire:
char World[50000];//Ton monde, en 1 et en 0
//On commence à compter à 0
void Draw(int x,int y)
{
int CasePointer = y*l + x;//Initialise à la première case
int reste = l - ( x+n);
for(int i=0; i<m;i++)
{
for(int j=0; j<n; j++)
{
print( World[ CasePointer+j ] )
}
//On passe une ligne
CasePointer+=l;//On passe une ligne à notre pointeur
}
} //Fin de la fonction
"
sans passer par une boucle fort qui risque d´être un peu lente ?
"
Ça m´étonnerait, mais bon... tout dépend toujours de l´algorithme, et comme toujours, si la vitesse est TA priorité, vas-y en Inline assembly* .
Je ne voit pas de problème. Ou alors je suis aveugle.
À propos du petit débat sur DirectX: ce n´est pas parce que c´est du Microsoft que c´est nécessairement mauvais. DirectX a du bon, au fond. D´ailleurs, si ce ne serait pas Microsoft, je sauterait dessus. Mais Microsoft étant ce qu´il est, je suis donc sous OpenGL ; P
"
oui, moi je fait du C/C++.par contre le C#, je sais pas pourcoi mais je le sent pas, g pas l´impression que ça attire beaucoup de monde...
"
Héhé, y,a quand même deux trucs vachement importants codé en C# en ce moment:
- Les programmes de gestion de XBoite Vivant!
- Freecell =) et je pense le Démineur hehe
Kelios
---------
déja en général, C rare que ce soit le monde qui bouge : )
définis ton grand tableau, et ne cherche pas a lui changer ses valeurs : quand tu affiches ton monde, tu dois faire un truc comme
void AfficheMonde()
{
for(b=0;b<YECRAN;b++)
for(a=0;a<BECRAN;a++)
affichebrique(a,b,tab[a][b]); /* une fonction que tu auras faite : qui affiche aux coords a,b la valeur du tableau tab[a][b] */
}
tu vois ce que je veux dire ?
essaie de mettre a la place :
affichebrique(a,b,tab[a+XOFFSET][b+YOFFSET]);
ou tu définis XOFFSET et YOFFSET comme la partie supérieur gauche de ta zone a afficher : ( le X que je t´ai mis sur ton dessin ci dessous)
11111111111111111111111111111111111111111111
1__________________________________________1
1___________________X111111111111111111____1
1___________________1_________________1____1
1___________________1_________________1____1
1___________________1_________________1____1
1___________________1_________________1____1
1___________________1111111111111111111____1
1__________________________________________1
11111111111111111111111111111111111111111111
Ainsi, avant l´affichage, tu changes la valeur de XOFFSET et YOFFSET, et tu lances AfficheMonde, et ça marche : tu n´as pas a décaler ton tableau...
Kelios :
si le C# attire du monde, comme il n´y a pas beaucoup de notion de pointeurs, ceci explique cela : nombre de personnes sont rebutées par les pointeurs ( les pauvres, il ne savent pas ce qu´ils perdent ! car y´a pas plus fort qu´un pointeur)
DirectX est tout simplement excellent et plus complet que OpenGL :
OpenGL contient le graphisme, tout aussi bien que DirectX,
mais DirectX contient :
DirectDraw : routines 2D
Direct3D : rourines 3D ( le tout remplacé par DirectGraphic dans DX8)
DirectInput : gestion des entrées : calvier, souris, stick, retour de force, tout !
DirectPlay : gestion réseau
DirectSound : gestion des sons
etc, je suis sur d´en oublier : mais bref, tous les outils pour faire des jeux du tonnerre de dieu.
Selon moi, boycotter Microsoft a ce point, c´est dommage : car sous prétexte que ça s´appelle Microsoft DirectX, tu te prives d´un outil puissant.
Pour ma part, je ne prends pas la haine contre microsoft comme certains, et je ne me prive pas de toutes les compatibilités en me forçant a totu faire sous Linux : car il faut bien admettre qu´il y a bcp + de choix sous Windows et Linux.
Autant GCC et G++ sont sympas, autant j´aime aussi Borland C++ sous Windows car tu fais ton Makefile a la souris.
Autant je n´ai rien contre Linux qui est bien stable, autant j´y vais que pour programmer ce que l´on doit faire en cours d´info, sinon je reste sous win pour ma prog personnelle avec DX.
Autant y´a des trucs sympas sous Linux, autant j´admets que rien ne vaut Internet Explorer pour naviguer par exemple.
Pareil je me régale sous Office, et je n´ai pas envie de m´emcombrer avec un clone sous Linux, parce que je trouve office suffisant pour ce que j´en fais, et que je n´ai pas envie de taper du pseudo HTML sous Latex.
Ne me sortez pas l´argument du prix d´office : on a tous des graveurs, ou un pote qui en a un, n´est ce pas ?
bref voila, je trouve dommage de se priver comme ça pour " militer", surtout que Windows ne va pas mourir comme ça : les gens non informaticiens préfrent tous Windows : ils ne veulent pas taper " cd plouf" pour aller dans le répertoire plouf, ils veulent cliquer dessus. Oui, il y a ça sous Linux aussi, mais l´interet de LInux est de piloter en mode console, et ça, ça n´exite que tres peu de gens...
Donc Windows n´est pas mort, et n´est pas pret de mourir : le boycott ne sert qu´a vous priver...
Conclusion : boycotter Mircrosoft, c´est se priver de beaucoup de choses, C bien dommage ! !