[resolu] minimap dans canvas
[resolu] minimap dans canvas
salut
Pour mes jeux android, j'ai conçu un éditeur de niveau avec purebasic.
J'utilise pour l'affiche central (la carte) un screen et des sprites car ça va beaucoup plus vite que le canvas.
J'ai ajouté une minimap (sur la gauche), pour avoir une vision globale.
Pour ça, j'utilise un canvas.
Mais redessiner sur ce canvas est horriblement long.
voici ce que je fais :
- j'ai une image qui fait la taille de ma map, soit 4000*3000
- je dessine dessus le fond + tous les sprites (enfin, les images)
- je copy cette image
- je resize la copie
- je dessine cette copie sur mon canvas
- j'efface cette copie
et ça s'affiche au bout d'une ou 2 secondes.
Donc, au secours ^^
J'ai pensé à ça :
- crée des "mini-image" de chaque image utilisée (proportion : minimap / taille de la map)
- je crée une image de la taille du canvas (environ 200*150)
- j'affiche tous les mini-images en fonction des sprites, en
x1 = (minimapWidth/ mapWidth) * x
y1 = (minimapHeight/ mapHeight) * x
[edit] mais cette méthode pose problème si on change la taille de la map, je dois refaire toutes les mini-images ^^[/edit]
Vous auriez une autre idée ou méthode pour que ce soit plus rapide ?
Pour mes jeux android, j'ai conçu un éditeur de niveau avec purebasic.
J'utilise pour l'affiche central (la carte) un screen et des sprites car ça va beaucoup plus vite que le canvas.
J'ai ajouté une minimap (sur la gauche), pour avoir une vision globale.
Pour ça, j'utilise un canvas.
Mais redessiner sur ce canvas est horriblement long.
voici ce que je fais :
- j'ai une image qui fait la taille de ma map, soit 4000*3000
- je dessine dessus le fond + tous les sprites (enfin, les images)
- je copy cette image
- je resize la copie
- je dessine cette copie sur mon canvas
- j'efface cette copie
et ça s'affiche au bout d'une ou 2 secondes.
Donc, au secours ^^
J'ai pensé à ça :
- crée des "mini-image" de chaque image utilisée (proportion : minimap / taille de la map)
- je crée une image de la taille du canvas (environ 200*150)
- j'affiche tous les mini-images en fonction des sprites, en
x1 = (minimapWidth/ mapWidth) * x
y1 = (minimapHeight/ mapHeight) * x
[edit] mais cette méthode pose problème si on change la taille de la map, je dois refaire toutes les mini-images ^^[/edit]
Vous auriez une autre idée ou méthode pour que ce soit plus rapide ?
Dernière modification par blendman le jeu. 31/août/2017 7:58, modifié 2 fois.
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: minimap dans canvas
Ce qui prend beaucoup de temps, c'est la copie et le resize, vu que l'image de base est lourde. Si ton ordi le permet, tu peux simplement faire une boucle et un point/plot des 200x150 pixels, ça devrait être plus rapide. Sinon, à la base, moi j'aurai mis tout l'écran en screen, utilisé la partie centrale pour le dessin comme tu le fais sans doute, et à chaque ajout d'un sprite, un petit plot dans la partie de gauche.
Re: minimap dans canvas
oui, mais là, la minimap ne ressemblerait à rien ^^
Voici ce que j'ai pour le moment :

Je ne peux pas faire un simple plot/point
je dois quand même dessiner une image pour chaque sprite, même si elle ne fait que 10*10
Voici ce que j'ai pour le moment :

Je ne peux pas faire un simple plot/point

je dois quand même dessiner une image pour chaque sprite, même si elle ne fait que 10*10
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: minimap dans canvas
Je vois ton problème. Alors, oui, une image alors, ce qui serait plus rapide ! Tu ne pas faire autrement qu'avec un canevas, mais dynamique comme ta carte (c'est à dire mis à jour en même temps). Quand tu ajoutes/enlèves un truc, tu le fais dessus. Vu que tu dois gérer les priorités, tu fais un grab de la portion modifiée. A la rigueur, tu ajoutes les modifs à une liste chaînée qui te permet de faire les affichages dans un thread séparé...
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: minimap dans canvas
Excusez l'intrusion d'un baltringue au milieu de deux connaisseurs comme vous 
Y connaissant fifre, je ne sais pas ce qui est de toi, les images , le programme ou autre, mais je suis toujours émerveillé de ton travail BLENDMAN
C'est tellement beau, qu'on ne peut décemment lire ce post sans se manifester et souligner cet état de fait
C'est un peu comme une douleur mais positive, on se sent obligé de le crier
Bravo ...tu donnes envie, pour un vers de terre passionné des GIF
Bon je retourne dans le néant intersidéral de la programmation graphique, d'où je n'aurais jamais du sortir

Y connaissant fifre, je ne sais pas ce qui est de toi, les images , le programme ou autre, mais je suis toujours émerveillé de ton travail BLENDMAN

C'est tellement beau, qu'on ne peut décemment lire ce post sans se manifester et souligner cet état de fait

C'est un peu comme une douleur mais positive, on se sent obligé de le crier

Bravo ...tu donnes envie, pour un vers de terre passionné des GIF

Bon je retourne dans le néant intersidéral de la programmation graphique, d'où je n'aurais jamais du sortir

Re: minimap dans canvas
Même les baleines, elles sont toujours obligée de venir respirer à la surface, alors il en est de même pour toi avec ton espace intersidéral.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: minimap dans canvas
Djes : oui, j'utilise des mini-images que je stocke dans une map() pour éviter les doublons. ça a l'air de pas trop mal marché ^^.
Du coup, j'update le canvas d'une image 200*150 environ.
@KCC : merci. Tout est de moi sur le screenshot : les images et le logiciel (fait en purebasic, bien sûr
)
je ne sais pas si tu t'en souviens, mais c'est pour mon jeu Arkeos (rpg 2D iso).
Du coup, j'update le canvas d'une image 200*150 environ.
@KCC : merci. Tout est de moi sur le screenshot : les images et le logiciel (fait en purebasic, bien sûr

je ne sais pas si tu t'en souviens, mais c'est pour mon jeu Arkeos (rpg 2D iso).
Dernière modification par blendman le mer. 30/août/2017 16:32, modifié 1 fois.
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: minimap dans canvas
Si tu pouvais quand même essayer avec des points/plots... Tu prends un pixel sur 20 en largeur, et 20 en hauteur, et ça devrait le faire. C'est une boucle qui prend trois minutes à faire, et à tester, juste pour voir.
Re: minimap dans canvas
oui , moi a ta place, je n'aurai meme pas utilisé le canvas (j'aime pas le canvas !!blendman a écrit :salut
Pour mes jeux android, j'ai conçu un éditeur de niveau avec purebasic.
J'utilise pour l'affiche central (la carte) un screen et des sprites car ça va beaucoup plus vite que le canvas.
J'ai ajouté une minimap (sur la gauche), pour avoir une vision globale.
Pour ça, j'utilise un canvas.
Mais redessiner sur ce canvas est horriblement long.?

ta methode avec l'image est bonne , ce qui va pas c'est l'utilisation du canvas ....
pourquoi tu t'embete avec un canvas, si tu n'utilises pas les fonction souris qui vont avec ..
utilise dirctement un ImageGadget , tu verra c'est bien plus rapide ! (pas de gestion souris a gerer )

Re: minimap dans canvas
suggestion :
exemple du maitre = https://www.purebasic.com/french/docume ... ng.pb.html
pat
Code : Tout sélectionner
Syntaxe
*Resultat = DrawingBuffer()
Description
Renvoie le tampon (buffer) de dessin, ce qui permet la manipulation des pixels directement en mémoire.
pat
Re: minimap dans canvas
Je me suis fait exactement la même reflexionKwai chang caine a écrit :je suis toujours émerveillé de ton travail BLENDMAN![]()
C'est tellement beau, qu'on ne peut décemment lire ce post sans se manifester et souligner cet état de fait

@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: minimap dans canvas
Salut à tous 
Djes :
le problème des point, c'est que tu le fais sur le surface de dessin, ici, le screen. Hors mes maps sont plus grandes que le screen, et j'utilise un zoom + une vue. Donc, ce n'est pas si simple, car ça signifie que je devrais décaler tous les sprites, remettre le zoom à 100, etc... calculer les point() puis refaire les opérations inverses, ce qui signifie beaucoup de manipulation quand même ^^.
Je verrai à l'occasion si je trouve du temps pour tester, mais ma technique fonctionne donc c'est cool (utiliser des images réduites et afficher ces images)
Zorro :
merci, j'utilise un imagegadget() maintenant, c'est un peu plus pratique.
Pat :
ça aurait pu être une solution, mais comme je disais à Djes, le problème c'est que le screen n'affiche pas toute ma map, donc, j'aurai beaucoup de manipulation à faire pour obtenir l'image complète de la map, puis devoir tout remanipuler dans l'autre sens pour tout remettre comme il faut ^^ (zoom, bouger la vue...)
Venom : comme je disais à KCC, sur le screenshot, la map vient de mon jeu Arkeos, j'en avais déjà parlé ici à partir de 2011, c'est même grâce à ça que je me suis mis à Purebasic

Djes :
le problème des point, c'est que tu le fais sur le surface de dessin, ici, le screen. Hors mes maps sont plus grandes que le screen, et j'utilise un zoom + une vue. Donc, ce n'est pas si simple, car ça signifie que je devrais décaler tous les sprites, remettre le zoom à 100, etc... calculer les point() puis refaire les opérations inverses, ce qui signifie beaucoup de manipulation quand même ^^.
Je verrai à l'occasion si je trouve du temps pour tester, mais ma technique fonctionne donc c'est cool (utiliser des images réduites et afficher ces images)

Zorro :
merci, j'utilise un imagegadget() maintenant, c'est un peu plus pratique.
Pat :
ça aurait pu être une solution, mais comme je disais à Djes, le problème c'est que le screen n'affiche pas toute ma map, donc, j'aurai beaucoup de manipulation à faire pour obtenir l'image complète de la map, puis devoir tout remanipuler dans l'autre sens pour tout remettre comme il faut ^^ (zoom, bouger la vue...)
Venom : comme je disais à KCC, sur le screenshot, la map vient de mon jeu Arkeos, j'en avais déjà parlé ici à partir de 2011, c'est même grâce à ça que je me suis mis à Purebasic

http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: [resolu] minimap dans canvas
Ah ok, je croyais que tu travaillais aussi sur une image interne de 4000x3000. A l'heure actuelle, on s'affranchit des limites dans les jeux, je trouvais ça bizarre ! C'est parfait si ta technique fonctionne, c'est quand même beaucoup plus propre et rapide ! 

Re: [resolu] minimap dans canvas
Coucou Djes
Non, en fait, ce logiciel, c'est un éditeur de map pour concevoir des map (level) pour des jeux en 2D et 2D isometrique.
Je l'utilise sur presque tous mes jeux Android
(fightfortress, towerbots et mes prochains jeux (arkeos, clash of bots, etc...)).
Donc, j'utilise des sprites, comme dans les jeux 2D classiques et le screen pour l'affichage "interne".
D'ailleurs, j'ai dû bidouiller plein de trucs et me créer une grosse lib de 3000 lignes de codes pour le système de sprite (pour avoir des fonctions comme l'offset, les animations, les transformations avec l'offset...), mais c'est bien pratique
.
Par contre, j'ai le bug avec transformsprite() et la limite d'affichage sur le screen à droite
(les sprites disparaissent alors qu'ils devraient être affichés).
J'espère que ce sera corrigé un de ces 4
.
Non, en fait, ce logiciel, c'est un éditeur de map pour concevoir des map (level) pour des jeux en 2D et 2D isometrique.
Je l'utilise sur presque tous mes jeux Android

Donc, j'utilise des sprites, comme dans les jeux 2D classiques et le screen pour l'affichage "interne".
D'ailleurs, j'ai dû bidouiller plein de trucs et me créer une grosse lib de 3000 lignes de codes pour le système de sprite (pour avoir des fonctions comme l'offset, les animations, les transformations avec l'offset...), mais c'est bien pratique

Par contre, j'ai le bug avec transformsprite() et la limite d'affichage sur le screen à droite

J'espère que ce sera corrigé un de ces 4

http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: [resolu] minimap dans canvas
C'est du beau travail, j'espère que ça marche pour toi !
Tu parles de celui-là ? Je me suis amusé pour vous taquiner un peu
blendman a écrit :Par contre, j'ai le bug avec transformsprite() et la limite d'affichage sur le screen à droite(les sprites disparaissent alors qu'ils devraient être affichés).
J'espère que ce sera corrigé un de ces 4.
Tu parles de celui-là ? Je me suis amusé pour vous taquiner un peu
