Bonjour,
Je tente ma chance, peut-être que quelqu'un sait comment on résout mon problème.
Pour mon école (Insa Iyon), je dois réaliser un projet d'informatique. Le but du mien est de réussir a réaliser un jeu du genre Worms. Pour réussir a avoir des terrain destructibles, nous utilisons un un array[0..2000,0..500] of integer rempli de 1 (pour le sol) et de 0 (pour là où il n'y a rien). L'idée pour remplir cette matrice serait de faire une image (avec gimp par exemple) en .bmp avec 2 couleurs (pour faire simple on a fait noir et blanc). Puis on l'ouvre dans un tbitmap dans le programme et avec une boucle for on compare la couleur de chaque pixel de l'image et si on a un pixel blanc on met un 0 dans la matrice et si on a un pixel noir on met un 1. Je mets le code pour que ce soit plus simple.
Donc vous pouvez tester, ceci marche parfaitement... sur Windows. Mon problème vient du fait que pour l'école on me demande d'exécuter le programme sur Linux. Et là, horreur, à l'exécution le programme ne s'exécute pas (on voit le tform sans rien dedans).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 const tailleimagex=2000; const tailleimagey=500; type cmatricecollision = class public mat:array[0..tailleimagex,0..tailleimagey] of integer; constructor createterrain(); end; implementation constructor cmatricecollision.createterrain; var i,j:integer; var image:TBitmap; begin image :=TBitmap.create; image.loadFromFile ('images/terrains/T1.bmp'); for i:=1 to tailleimagex-1 do begin for j:=1 to tailleimagey-1 do begin case image.canvas.pixels[i,j] of clwhite: mat[i,j]:=0; clblack: mat[i,j]:=1; end; end; end; end;
La raison est que la ligne 'case image.canvas.pixels[i,j] of' lague énormément. Je m'en suis rendu compte quand j'ai enlevé des
à un autre endroit du programe (je m'en servais pour avoir à afficher moins de pixels lors du rafraîchissement d'une partie de l'image mais vérifier la valeur d'un pixel avec ce if lague au moins 20 fois plus que de faire un image.canvas.pixels[i,j]:=clcolor !!). Quand je dis lag, je parle en temps pris pour exécuter la ligne lors de l'utilisation du programme (j'ai fait des test avec des timers).
Code : Sélectionner tout - Visualiser dans une fenêtre à part if image.canvas.pixels[i,j]=clwhite
Donc je voudrais savoir si quelqun connaît une commande qui me renvoie la couleurs du pixel (soit sous le format clcolor ou en rgb ou autre, je trouverai bien comment le convertir) autre que image.canvas.pixels[i,j]. Ou si quelqu'un a une idée de comment l'utiliser d'une façon à ne pas provoquer de lag.
Je rappelle que ce problème n'existe que sous Linux, et que la réponse n'est pas un problème de capacité du PC (j'ai testé avec plusieurs et de toute façon le PC qui devra exécuter le programme n'est pas vraiment fantastique).
Partager