Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lignes ou icônes ou sprites ?

2 réponses
Avatar
Jacquelin Hardy
Bonjour groupe,

je désire avoir votre opinion sur le problème suivant:

Je veux représenter sur une PictureBox des navires qui se déplacent en
toutes directions. Le fond de la pictureBox est une carte marine
vectorielle. Le symbole utilisé pour chaque navire est un triangle
isocèle dont l'angle joignant les 2 côtés égaux représente la direction
de chaque navire.

Il peut y avoir une vingtaine de navires en même temps avec des
mouvements différents et la position de chacun est renouvelée aux 6
secondes environ.

Comment vous y prendriez-vous pour dessiner les triangles ? Leur
dimensions ne changent pas avec l'échelle de la carte. Devrais-je
attribuer 3 lignes pour chaque navire et les déplacer à chaque mouvement
de celui-ci ? Ou bien créer un icône unique qui subirait à chaque fois
une rotation suivant la direction du navire avant d'être dessiné. Dans
ce cas comment faire pour ne pas effacer la carte où le navire a passé?

Ou bien utliser des sprites, notion qui m'est inconnue pour le moment.

Merci de votre aide

Jacquelin Hardy

2 réponses

Avatar
Jean-marc
Jacquelin Hardy wrote:
Bonjour groupe,

je désire avoir votre opinion sur le problème suivant:

Je veux représenter sur une PictureBox des navires qui se déplacent en
toutes directions. Le fond de la pictureBox est une carte marine
vectorielle. Le symbole utilisé pour chaque navire est un triangle
isocèle dont l'angle joignant les 2 côtés égaux représente la
direction de chaque navire.

Il peut y avoir une vingtaine de navires en même temps avec des
mouvements différents et la position de chacun est renouvelée aux 6
secondes environ.

Comment vous y prendriez-vous pour dessiner les triangles ? Leur
dimensions ne changent pas avec l'échelle de la carte. Devrais-je
attribuer 3 lignes pour chaque navire et les déplacer à chaque
mouvement de celui-ci ? Ou bien créer un icône unique qui subirait à
chaque fois une rotation suivant la direction du navire avant d'être
dessiné. Dans ce cas comment faire pour ne pas effacer la carte où le
navire a passé?
Ou bien utliser des sprites, notion qui m'est inconnue pour le moment.



Hello,

Vu les éléments:
- rafraichissement très faible (6 secondes)
- Très peu de segments : 20 navires (3 lignes) = 60 segments

Je ne m'embêterais pas, je redessinerais tout à chaque fois, c'est
dire toutes les 6 secondes (avec Line).

Si l'idée de tout redessiner t'ennuie, alors je ferais avec des
objets Line, mais ce n'est pas hyper élégant.

Je ne sais pas si l'affichage de la carte elle même est couteux, ca
peut orienter le choix dans une direction ou l'autre.

Autres options: utiliser GDI ou GDI+, pour des tracés ultra-rapides.
Un peu de Google et un tour sur vbfrance te fournira des centaines
d'exemples.

Pour faire des choses fluides et sympa, on peut jouer avec 2 pictureBox,
qu'on échange à chauqe affichage. Ainsi on peut préparer le dessin en
arrière plan dans la picture masquée et la faire apparaitre d'un coup
quand tout est prêt. C'est un classique de jouer avec 2 "buffers" pour
l'affichage.


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jacquelin Hardy
Merci bien pour tes conseils Jean-Marc,

> Si l'idée de tout redessiner t'ennuie, alors je ferais avec des
> objets Line, mais ce n'est pas hyper élégant.
C'est la façon que j'utilise actuellement. La carte est redessinée aux
20 secondes, et la position de chaque cible aux 6 secondes. C'est
pourquoi j'avais choisi les objets Line qu'on peut déplacer sans laisser
de marques sur la même carte.
Maintenant je vais aller voir du côté de GDI+.

Merci encore.

Jacquelin H.

Jean-marc a écrit :
Jacquelin Hardy wrote:
Bonjour groupe,

je désire avoir votre opinion sur le problème suivant:

Je veux représenter sur une PictureBox des navires qui se déplacent en
toutes directions. Le fond de la pictureBox est une carte marine
vectorielle. Le symbole utilisé pour chaque navire est un triangle
isocèle dont l'angle joignant les 2 côtés égaux représente la
direction de chaque navire.

Il peut y avoir une vingtaine de navires en même temps avec des
mouvements différents et la position de chacun est renouvelée aux 6
secondes environ.

Comment vous y prendriez-vous pour dessiner les triangles ? Leur
dimensions ne changent pas avec l'échelle de la carte. Devrais-je
attribuer 3 lignes pour chaque navire et les déplacer à chaque
mouvement de celui-ci ? Ou bien créer un icône unique qui subirait à
chaque fois une rotation suivant la direction du navire avant d'être
dessiné. Dans ce cas comment faire pour ne pas effacer la carte où le
navire a passé?
Ou bien utliser des sprites, notion qui m'est inconnue pour le moment.



Hello,

Vu les éléments:
- rafraichissement très faible (6 secondes)
- Très peu de segments : 20 navires (3 lignes) = 60 segments

Je ne m'embêterais pas, je redessinerais tout à chaque fois, c'est
dire toutes les 6 secondes (avec Line).

Si l'idée de tout redessiner t'ennuie, alors je ferais avec des
objets Line, mais ce n'est pas hyper élégant.

Je ne sais pas si l'affichage de la carte elle même est couteux, ca
peut orienter le choix dans une direction ou l'autre.

Autres options: utiliser GDI ou GDI+, pour des tracés ultra-rapides.
Un peu de Google et un tour sur vbfrance te fournira des centaines
d'exemples.

Pour faire des choses fluides et sympa, on peut jouer avec 2 pictureBox,
qu'on échange à chauqe affichage. Ainsi on peut préparer le dessin en
arrière plan dans la picture masquée et la faire apparaitre d'un coup
quand tout est prêt. C'est un classique de jouer avec 2 "buffers" pour
l'affichage.