Page 1 sur 1
[..] ControlMove image transparente
Posté : ven. 01 juin 2012 23:00
par silvere
Bonjour, je veut faire un petit jeu inspirer du jeu TapTap (Sur Iphone) :
Je voudrais bouger une image transparente ( En gif) mais le problème c'est que sa ne garde pas la bonne transparence, enfin difficile a expliquer essayez par vous même :
Merci d'avance

Re: [..] ControlMove image transparente
Posté : sam. 02 juin 2012 15:00
par Tlem
Il y a pourtant plusieurs exemples sur le forum qui pourraient vous aider ...
Re: [..] ControlMove image transparente
Posté : sam. 02 juin 2012 19:16
par silvere
Je n'ai pas trouver les les exemple dont-tu parle, pourrais-tu me donner les lien s'il te plais.
Re: [..] ControlMove image transparente
Posté : sam. 02 juin 2012 21:59
par mikell
Voilà, mais passer en gif pour le mouvement c'est pas génial...
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$CheminDisque = "Disque.gif"
$TaillePic = 60
$Largeur = 350
$Hauteur = 500
$sens = 1
$gui = GUICreate('Tap Tap', $Largeur, $Hauteur)
$Background = GUICtrlCreatePic("Background.jpg", 0, 0, $Largeur, $Hauteur)
GUICtrlSetState(-1, $GUI_DISABLE)
$Pic = GUICreate("", $TaillePic, $TaillePic, 20, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
GUICtrlCreatePic($CheminDisque, 0, 0, $TaillePic, $TaillePic)
GUISetState(@SW_SHOW, $Pic)
GUISetState(@SW_SHOW, $Gui)
While 1
$pos = WinGetPos($Gui)
$pos2 = WinGetPos($Pic)
WinMove($Pic, "", $pos2[0]+$sens*5, $pos[1]+30)
If $pos2[0] > $pos[0]+300 Then $sens = -1
If $pos2[0] < $pos[0] Then $sens = 1
Sleep(10)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Re: [..] ControlMove image transparente
Posté : sam. 02 juin 2012 23:49
par silvere
Ha ouai bonne idée ! Mais le problème maintenant c'est que derrière le "Disque", c'est gris, j'aimerais bien voir le Background.
Pourquoi le gif n'est pas bien ? Que veut que tu je mette a la place du gif ?
Re: [..] ControlMove image transparente
Posté : dim. 03 juin 2012 00:05
par mikell
En reprenant tes images, on l'a le background, le fond du gif disque est transparent
Du png
Re: [..] ControlMove image transparente
Posté : dim. 03 juin 2012 00:16
par silvere
Et avec du png, l'image serait de meilleur qualité ?
Re: [..] ControlMove image transparente
Posté : dim. 03 juin 2012 11:14
par mikell
Probable (16M couleurs vs 256), et aussi ya des tonnes d'exemples d'utilisation de png sur le forum
Re: [..] ControlMove image transparente
Posté : dim. 03 juin 2012 22:07
par silvere
D'accord je vais prendre du png, mais sa résous toujours pas le problème de la transparence.
Edit : j'ai réussi mais il y encore un problème :
Comment savoir quand le Disque est dans le le Cercle ?
Re: [..] ControlMove image transparente
Posté : dim. 03 juin 2012 23:17
par mikell
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Icons.au3>
Global $Time
Dim $Cercle[3]
$CheminCercle = "Cercle.png"
$CheminDisque = "Disque.gif"
$TaillePic = 60
$Largeur = 350
$Hauteur = 500
$Gui = GUICreate("Tap Tap", $Largeur, $Hauteur)
$Background = GUICtrlCreatePic("Background.jpg", 0, 0, $Largeur, $Hauteur)
GUICtrlSetState(-1, $GUI_DISABLE)
$Cercle[0] = GUICtrlCreatePic("", 20, $Hauteur - $TaillePic - 10, $TaillePic, $TaillePic)
$Cercle[1] = GUICtrlCreatePic("", 145, $Hauteur - $TaillePic - 10, $TaillePic, $TaillePic)
$Cercle[2] = GUICtrlCreatePic("", 270, $Hauteur - $TaillePic - 10, $TaillePic, $TaillePic)
_SetImage($Cercle[0], $CheminCercle)
_SetImage($Cercle[1], $CheminCercle)
_SetImage($Cercle[2], $CheminCercle)
$Pic = GUICreate("", $TaillePic, $TaillePic, 20, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED, $WS_EX_MDICHILD), $Gui)
$o = GUICtrlCreatePic($CheminDisque, 0, 0, $TaillePic, $TaillePic)
GUISetBkColor(0xFFFFFF, $Pic)
_WinAPI_SetLayeredWindowAttributes($Pic, 0xFFFFFF)
GUISetState(@SW_SHOW, $Gui)
GUISetState(@SW_SHOW, $Pic)
While 1
[color=#BF0000]$pos0 = WinGetPos($Gui)[/color]
$pos = WinGetPos($Pic)
If $Time = "" Then
WinMove($Pic, "", $pos[0], $pos[1] + 2)
[color=#BF0000]If $pos[1] >= $pos0[1] + $Hauteur - 42 Then ; (42 chez moi )
Msgbox(0,"", "ok")
Exit
EndIf[/color]
If $pos[0] = 529 And $pos[1] = 556 Then ;Fonctionne uniquement qu'on l'on bouge pas la fenetre et si on a une résolution de 1366 par 768
$Time = TimerInit()
EndIf
ElseIf TimerDiff($Time) >= 1000 Then
MsgBox(0, "", "Miss")
Exit
EndIf
Sleep(20)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Re: [..] ControlMove image transparente
Posté : lun. 04 juin 2012 21:41
par silvere
Ha merci.
Je sais pas pourquoi mais j'ai vraiment du mal avec ce jeu

j'arrive pas a faire que la vitesse soit constante, avec $TimerMouvement j'ai empêcher que la vitesse soit trop rapide.
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <Icons.au3>
HotKeySet("{DOWN}", "Milieu")
HotKeySet("{LEFT}", "Gauche")
HotKeySet("{RIGHT}", "Droite")
Dim $Time[1]
Dim $Pic[1]
Global $TimerMouvement
$CheminCercle = "Cercle.png"
$CheminDisque = "Disque.gif"
$TaillePic = 60
$Largeur = 350
$Hauteur = 500
$Gui = GUICreate("Tap Tap", $Largeur, $Hauteur)
$Background = GUICtrlCreatePic("Background.jpg", 0, 0, $Largeur, $Hauteur)
GUICtrlSetState(-1, $GUI_DISABLE)
CreateCercles()
CreateDisque("Gauche")
CreateDisque("Milieu")
CreateDisque("Droite")
GUISetState(@SW_SHOW, $Gui)
For $i = 1 To UBound($Pic) - 1
GUISetState(@SW_SHOW, $Pic[$i])
Next
$TimerMouvement = TimerInit()
While 1
If TimerDiff($TimerMouvement) >= 10 Then
Mouvement()
$TimerMouvement = TimerInit()
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func Droite()
ControlSend("", "", "", "{RIGHT}")
MsgBox(0, "", "Droite")
EndFunc ;==>Droite
Func Gauche()
ControlSend("", "", "", "{LEFT}")
MsgBox(0, "", "gauche")
EndFunc ;==>Gauche
Func Milieu()
ControlSend("", "", "", "{DOWN}")
MsgBox(0, "", "Milieu")
EndFunc ;==>Milieu
Func Mouvement()
For $i = 1 To UBound($Pic) - 1
$posGui = WinGetPos($Gui)
$posPic = WinGetPos($Pic[$i])
If $Time[$i] = "" Then
WinMove($Pic[$i], "", $posPic[0], $posPic[1] + 5)
If $posPic[1] >= $posGui[1] + $Hauteur - 50 Then
$Time[$i] = TimerInit()
EndIf
ElseIf TimerDiff($Time[$i]) >= 200 Then
Exit
EndIf
Next
EndFunc ;==>Mouvement
Func CreateCercles()
Dim $Cercle[3]
$Cercle[0] = GUICtrlCreatePic("", 20, $Hauteur - $TaillePic - 10, $TaillePic, $TaillePic)
$Cercle[1] = GUICtrlCreatePic("", 145, $Hauteur - $TaillePic - 10, $TaillePic, $TaillePic)
$Cercle[2] = GUICtrlCreatePic("", 270, $Hauteur - $TaillePic - 10, $TaillePic, $TaillePic)
For $i = 0 To 2
_SetImage($Cercle[$i], $CheminCercle)
Next
EndFunc ;==>CreateCercles
Func CreateDisque($Pos)
Local $i
If $Pos = "Gauche" Then
$i = 20
ElseIf $Pos = "Milieu" Then
$i = 145
ElseIf $Pos = "Droite" Then
$i = 270
EndIf
_ArrayAdd($Time, "")
_ArrayAdd($Pic, GUICreate("", $TaillePic, $TaillePic, $i, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED, $WS_EX_MDICHILD), $Gui))
GUICtrlCreatePic($CheminDisque, 0, 0, $TaillePic, $TaillePic)
GUISetBkColor(0xFFFFFF, $Pic)
_WinAPI_SetLayeredWindowAttributes($Pic, 0xFFFFFF)
EndFunc ;==>CreateDisque
Re: [..] ControlMove image transparente
Posté : mar. 05 juin 2012 19:43
par silvere
J'ai améliorer un peu le scripte si vous arrivez a le rendre plus fluide...
Il reste un petit bug qui arrive de temps en temps dont je n'ai pas trouver la provenance :
Code : Tout sélectionner
TapTap.au3 (145) : ==> Subscript used with non-Array variable.:
If $posPic[0] - $posGui[0] - 3 = 20 Then
If $posPic^ ERROR
Re: [..] ControlMove image transparente
Posté : mar. 05 juin 2012 22:28
par mikell
Vaudrait le coup d'essayer à la ligne 145
Re: [..] ControlMove image transparente
Posté : mer. 06 juin 2012 15:28
par silvere
non, le bug est toujours présent de temps en temps