Page 1 sur 1

[R] GUICtrlCreatePic + création d'un point en mouvement

Posté : mar. 25 sept. 2012 09:58
par cortexx
Bonjour,

Après de multiple recherche et de test, je ne parviens pas à résoudre un problème et j'en appel à votre aide.
Je cherche à créer un point qui se déplace sur une image (pour sa pas de problème), le soucis c'est quand le point se déplace il reste des résidus de sont passage.
J'avais résolu en partie le problème en actualisant l'image avec le point se déplacent. Mais le problème c'est que j'ai d'autres points (cela fixe) qui disparaisse et sa me dérange de les redessiner à chaque fois (vu le nombre sa prend beaucoup trop de ressource et sa deviens très lent).

Je pense que le mieux serait d'avoir l'image en arrière plan (background) et de désiner le ou les point sur une espèce de calque.
Voici un bout de code amènagé pour visualisé mon problème, il vous faut juste ajouter une image de 1024 x 768 (nommé : Plan.jpg) dans le même dossier que le fichier Au3.

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>

Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)

Global $GUI, $Count = 0, $background

$GUI = GUICreate("Plan", 1024, 768)
GUISetOnEvent($GUI_EVENT_CLOSE, "WindowClose")

$background = GUICtrlCreatePic("Plan.jpg", 0, 0, 1024, 768)

GUISetState()

AdlibRegister('_RefreshDot', 500)

While 1
    Sleep(100)
WEnd

Func _RefreshDot()
    _GDIPlus_Startup()
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($GUI)
    Local $Brush = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    Local $Pen = _GDIPlus_PenCreate(0xFFFFFFFF)
    Local $X = 100 + $Count
    Local $Y = 100 + $Count
    _GDIPlus_GraphicsFillEllipse($hGraphic, $X, $Y, 6, 6, $Brush)
    _GDIPlus_GraphicsDrawEllipse($hGraphic, $X, $Y, 6, 6, $Pen)
    _GDIPlus_Shutdown()
    $Count += 1
EndFunc

Func WindowClose()
    Exit
EndFunc

Re: [..] GUICtrlCreatePic + création d'un point en mouvement

Posté : mar. 25 sept. 2012 11:23
par Iste
Vous n'avez effectivement pas le choix de tout repeindre. (voir tout les tutos du site du zéro sur tout ce qui touche aux sujet)
► Afficher le texte
il serait également de bon gout d'appeler les fonctions xxxDispose sur vos objets.

Pour le scintillement, voir du coté du double buffering. Comme c'est un sujet tres lourdement abordé sur la toile et que AutoIt n'est pas orienté pour ce genre de code, je vous laisse vous informer sur google pour plus d'info.

Re: [..] GUICtrlCreatePic + création d'un point en mouvement

Posté : mar. 25 sept. 2012 17:52
par cortexx
Merci pour c'est précision, je vais faire mes recherches dans la direction que tu ma proposé.

Par contre tu a mise à jour le mon code et je l'ai testé, mais l'image de fond n'apparait pas .... normal ?

Re: [..] GUICtrlCreatePic + création d'un point en mouvement

Posté : mar. 25 sept. 2012 18:56
par Iste
Oui c'est normal, ayant testé cela vite fait au boulot je n'ai meme pas remarqué l'image ^^' (qui ne s'affiche pas n'étant pas présente sur mon pc)

Pour cela, il vous faudra redessiner votre image, soit en updatant l'objet créé par GUICtrlCreatePic (a tester) soit en dessinant directement l'image grace a gdi+

Re: [..] GUICtrlCreatePic + création d'un point en mouvement

Posté : mar. 25 sept. 2012 21:12
par mikell
C'est un poil hors-sujet concernant le script posté, mais en plein dedans pour le titre du sujet
► Afficher le texte

Re: [..] GUICtrlCreatePic + création d'un point en mouvement

Posté : mer. 26 sept. 2012 09:40
par cortexx
Merci à vous deux, vous m'avez donné deux pistes qui sont prometeuses.
Je vais faire des recherches plus avancé dans le GDI+ et j'ai testé ton code mikell sa fonctionne bien (mis à part un léger cintillement du point .. pas grave), je vais aussi m'en inpiré pour finir mon code.

PS : je vois que je peux compter sur la communauté AutoIT Fr pour trouver de bonne idée :D