[resolu] minimap dans canvas

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

[resolu] minimap dans canvas

Message par blendman »

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 ?
Dernière modification par blendman le jeu. 31/août/2017 7:58, modifié 2 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: minimap dans canvas

Message par djes »

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.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: minimap dans canvas

Message par blendman »

oui, mais là, la minimap ne ressemblerait à rien ^^

Voici ce que j'ai pour le moment :
Image

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
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: minimap dans canvas

Message par djes »

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é...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: minimap dans canvas

Message par Kwai chang caine »

Excusez l'intrusion d'un baltringue au milieu de deux connaisseurs comme vous :oops:
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 8O
C'est tellement beau, qu'on ne peut décemment lire ce post sans se manifester et souligner cet état de fait 8)
C'est un peu comme une douleur mais positive, on se sent obligé de le crier :D
Bravo ...tu donnes envie, pour un vers de terre passionné des GIF 8O
Bon je retourne dans le néant intersidéral de la programmation graphique, d'où je n'aurais jamais du sortir :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: minimap dans canvas

Message par Micoute »

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 !
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: minimap dans canvas

Message par blendman »

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).
Dernière modification par blendman le mer. 30/août/2017 16:32, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: minimap dans canvas

Message par djes »

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.
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: minimap dans canvas

Message par Zorro »

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.?
oui , moi a ta place, je n'aurai meme pas utilisé le canvas (j'aime pas le canvas !! :mrgreen: ...avec la voix du stroumpf grognon )
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 ) :)
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: minimap dans canvas

Message par Patrick88 »

suggestion :

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.
exemple du maitre = https://www.purebasic.com/french/docume ... ng.pb.html

pat
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: minimap dans canvas

Message par venom »

Kwai chang caine a écrit :je suis toujours émerveillé de ton travail BLENDMAN 8O
C'est tellement beau, qu'on ne peut décemment lire ce post sans se manifester et souligner cet état de fait 8)
Je me suis fait exactement la même reflexion :lol: Bravo BLENDMAN






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: minimap dans canvas

Message par blendman »

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 :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: [resolu] minimap dans canvas

Message par djes »

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 ! :)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [resolu] minimap dans canvas

Message par blendman »

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 :D (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 :D.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: [resolu] minimap dans canvas

Message par djes »

C'est du beau travail, j'espère que ça marche pour toi !
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 :D.

Tu parles de celui-là ? Je me suis amusé pour vous taquiner un peu :P
Répondre