Jeu 2D dessin pixel par pixel? tableau matrice? [1920][1200] trop lent? meilleur [Résolu]

Messages postés
43
Date d'inscription
samedi 13 juin 2009
Dernière intervention
19 novembre 2010
- 4 juin 2010 à 20:12 - Dernière réponse :
Messages postés
43
Date d'inscription
samedi 13 juin 2009
Dernière intervention
19 novembre 2010
- 18 juin 2010 à 01:11
Voici mon problème:
Je sais dessiner dans une fenêtre en api win32 des points, lignes, rectangles ou autres.
Mon idée serait d avoir un monde de 1920 par 1200 px (ou taille variable en fonction de l'écran)
le décor serait mouvant, donc chaque pixel bougerait en fonction de différents parametres.
il pourrait être détériore comme dans worms àrmageddon, il serait composé de différents éléments qui bougent indépendament les uns des autres, mais les joueurs qui s' y affronteraient en temps réel, en meme temps pouraient sauter d'un élément du décor à l autre, se protéger derriere un tas de pixels...
donc ils se tirent dessus et chaque joueur controle un personnage avec un bout du clavier(wasd/espace/zghj...haut bas gauche droit/ctrl/numpad)
voir un troisieme joueur qui jouerait avec la manette de xbox 360 ou autre, mais alors la je sais pas dutout comment on fait pour recevoir les vk_ de la manette... :<(
Bref je débute ce prog et j aimerais des exemples de jeux 2d a la worms et savoir si c est possible de créer une matrice de pixels qui se raffraichit a chaque fois que le décor bouge et que les armes explosent ou se déplacent, qu un joueur bouge...
Quelle méthode serait la plus simple et rapide, sachant que je ne veux ni utiliser opengl ou direct x ou toute autre librairie dont je ne connais rien.
J aimerais n utiliser que du c++ en api win 32.
créer un bitmap en mémoire, avec pour chaque pixel 0/1 ou 256 couleurs et jouer sur ces pixels en fonction de leur propriété.
[1920][1200][0/1][transparence][couleur]...???
Du coup ca me permettrait de tester à chaque déplacement des missiles ou lazer... envoyés, avec getpixel si un pixel du décor s ' y trouve, si il y a un joueur, ou un autre missile...
Et pareil pour le déplacement des joueurs, je saurais s'il doit continuer à tomber, ou s'il a du décor sous lui, s'il est sur de l'eau ou du dur...
Voilà c'est à peu pres tout.
J'avais fait un truc du genre en tres bazic sur ti82+ ou chacun leur tour deux joueurs s'envoyaient un pixel en parabole avec du vent et la gravité dans un décor aléatoire j aimerais refaire ca en mieux sur pc...
Merci pour toute aide j espère que vous aurez compris mon problème, je ne sais pas par ou commencer. je ne sais pas quelles fonctions appeler, j ai une bonne idée des algo, mais aucune du code.
le pire c est pour la retranscription du monde en pixels sur l ecran, j ai peur de faire un truc trop lent, bien que j aie un i7^^
Merciiiiiiiiiiii
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Dernière intervention
16 juin 2010
9 juin 2010 à 20:13
3
Merci
http://www.cppfrance.com/codes/BASE-UTILISATION-GDI-API-WINDOWS_46504.aspx

connais pas trop l'api, mais vu msdn, tu devrais avoir moyen d'obtenir le buffer directement.

Juste après
if ( ... CreateDIBSection (...)...){...} , le pointeur 'tmp' doit pointer sur ton buffer de [width]x[height]x[3 couleurs]

Sors ce pointeur de la fonction, mets le en global en attendant. Et change le en unsigned char * , d'ailleurs.
Dans le case:WM_PAINT, essaye de faire tmp[0] = 255. Si le pixel en haut à droite devient rouge, t'as gagné.

_______________________
Omnia vincit labor improbus
http://calvin-studio.fr

Merci Arnaud16022 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Arnaud16022
Messages postés
43
Date d'inscription
samedi 13 juin 2009
Dernière intervention
19 novembre 2010
4 juin 2010 à 20:51
0
Merci
En gros ca ressemblerait à ca:
Commenter la réponse de gregroar
Messages postés
43
Date d'inscription
samedi 13 juin 2009
Dernière intervention
19 novembre 2010
7 juin 2010 à 13:28
0
Merci
Bonjour les mentors.
bon ba voila. J'ai fait une ptite fonction de deux lignes qui me remplit pixel par pixel tout mon écran.
Eh ba ca prend vachement de temps.
Alors je me dis que j'ai encore beaucoup à apprendre.
Aussi j'aimerais savoir quoi.
Comment se fait t il qu'un ordi puisse afficher un fps a 60 frames par seconde et que mon jeu 2d ne parvienne pas a
dessiner tout l'écran en 1 minute.
Je comprends donc que je dois d'abord calculer toute mon image, puis l'afficher.
Mais comment on faiiiiiiiiiiiiiiittttt??????
Exemples?
SVP.
Aide?
Tutoriel?
AMIS?
hep!
Ca vous dit pas d jouer a mon jeu?
Avouez qu ca a l air pas mal non?
Si vous avez aimé worms, vous allez kiffer Balls
Commenter la réponse de gregroar
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Dernière intervention
16 juin 2010
7 juin 2010 à 22:02
0
Merci
Avec SetPixel ? C'est l'une des fonctions les plus lentes de l'API win32.
Cherche sur ce site un truc genre "win32 double buffering"
grosso modo tu remplis un tableau qui est en fait ton image, et tu transfères tout d'un coup à l'affichage.
MP si problème

_______________________
Omnia vincit labor improbus
http://calvin-studio.fr
Commenter la réponse de Arnaud16022
Messages postés
43
Date d'inscription
samedi 13 juin 2009
Dernière intervention
19 novembre 2010
9 juin 2010 à 22:35
0
Merci
Merci bocouuuuu
Commenter la réponse de gregroar
Messages postés
43
Date d'inscription
samedi 13 juin 2009
Dernière intervention
19 novembre 2010
13 juin 2010 à 16:56
0
Merci
j'ai resolu le probleme de conversion invalide de void to HBRUSH avec dev c++ en supprimant certaines lignes, mais pourquoi ca marche pas?
C'est quoi ce probleme de conversion invalide?
il fo que je fasse quoi pour que ca marche?
hOldBrush = SelectObject (hMDC, hBrush);
In function `LRESULT WndProc(HWND__*, UINT, WPARAM, LPARAM)':
invalid conversion from `void*' to `HBRUSH__*'
Commenter la réponse de gregroar
Messages postés
3
Date d'inscription
mercredi 20 août 2003
Dernière intervention
13 juin 2010
13 juin 2010 à 18:50
0
Merci
Encore une fois, ce ne sont que des suppositions (je ne connais ni l'API ni ton code), mais je pense que :
- tu ne devrais pas toucher à hBrush
- c'est 'tmp' qu'il faudrait passer de void * à unsigned char *
Commenter la réponse de Arnaud1602
Messages postés
43
Date d'inscription
samedi 13 juin 2009
Dernière intervention
19 novembre 2010
16 juin 2010 à 11:38
0
Merci
ok mais comment je l ecris mon buffer decor?
couleur[][][];
decor[1920][1200][couleur];
ou
decor[1920][1200][r,v,b];
ou
decor[1920][1200][ffffff];

cela pourait il etre bien de creer une structure ou je ne sais trop quoi d autre? inutile?
et puis je ajouter à mon tableau décor des propriétés en plus?
genre:
decor[1920][1200][couleur][matiere][pression][temperature][vecteur];
et est il possible de faire hwnd=decor ou un truc du genre hwnd=createcompatibledc(decor)
et est il possible de n envoyer que les 3 premieres dimensions d un tableau dans un autre?
qu est ce qui est le plus rabide? a=b ou *b

merci encore et bonne prog.
en espérant toujours trouver quelqu un pour m aider dans ce projet. Etudiant ou autre.
Je galère.
Commenter la réponse de gregroar
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Dernière intervention
16 juin 2010
16 juin 2010 à 17:40
0
Merci
ok mais comment je l ecris mon buffer decor?

->
decor[3*(x+largeur*y)+0] = r
decor[3*(x+largeur*y)+1] = g
decor[3*(x+largeur*y)+2] = b

cela pourait il etre bien de creer une structure ou je ne sais trop quoi d autre? inutile?
-> tant que t'auras pas trouvé comment dessiner un pixel, ça te servira à rien.

et puis je ajouter à mon tableau décor des propriétés en plus?

-> pas ce tableau-ci. Crée-en un autre pour chaque propriété, genre Matiere mat[1900][1200];

et est il possible de n envoyer que les 3 premieres dimensions d un tableau dans un autre?

->non, d'où ma réponse précédente

et est il possible de faire hwnd=decor ou un truc du genre hwnd=createcompatibledc(decor)

-> pas la moindre idée, lis la doc.

qu est ce qui est le plus rabide? a=b ou *b

-> ???



_______________________
Omnia vincit labor improbus
http://calvin-studio.fr
Commenter la réponse de Arnaud16022
Messages postés
43
Date d'inscription
samedi 13 juin 2009
Dernière intervention
19 novembre 2010
18 juin 2010 à 01:11
0
Merci
Merci Arnaud t'es mon meilleur collaborateur, je pensais pas qu un tableau a une dimension était suffisant^^.
il suffit de lire dedans avec une fonction de x.
C'est quoi ca en maths déjà? les inéquations, les équations?
m'en fut j ai tout oublié.
Ca marche c'est le principal!! enfin presque``_
Merci encore.
Commenter la réponse de gregroar

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.