Gambas France BETA


Pas de compte ? Incription

scintillement d'ecran avec une drawarea

Ce sujet est résolu.

1
AuteurMessages
spheris#1 Posté le 19/2/2012 à 00:06:48
bonsoir,
Je realise un essai avec une drawarea et je suis confronté à un ptit souci.
Je veux superposer 2 images (jusque là pas de souci).
comme ceci : (voiture et paysage) :



Dans un timer je déplace la voiture suivant des touches de clavier appuyées U H N K

Quelque soit le delai de mon timer l'image scintille de façon désagrable sur l'écran. Auriez-vous une solution ?

voici mon code :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
' Gambas class file
PUBLIC x AS INTEGER = 10
PUBLIC y AS INTEGER = 10

PUBLIC SUB _new()
END

PUBLIC SUB Form_Open()
ME.Center
END

PUBLIC SUB Menu2_Click()
ME.Close
END

PUBLIC SUB Form_Resize()
DrawingArea1.Width = ME.Width
DrawingArea1.Height = ME.Height - 20
END

PUBLIC SUB Timer1_Timer()
DrawingArea1.Clear
DrawingArea1.SetFocus
Draw.Begin(DrawingArea1)
Draw.Picture(Picture["road.png"], 0, 0)
Draw.Picture(Picture["car.png"], x, y)
Draw.End
Menu3.Text = x
END

PUBLIC SUB DrawingArea1_KeyPress()
DIM ltext AS VARIANT
ltext = key.text
menu4.text = ltext
SELECT CASE ltext
CASE "k"
x = x + 10
CASE "h"
x = x - 10
CASE "n"
y = y + 10
CASE "u"
y = y - 10
END SELECT
END


le programme en GB2 pour test :

http://gambaslinux.eg2.fr/img/jeux/ptitjeux-0.0.3.tar.gz

;)
Prokopy#2 Posté le 19/2/2012 à 04:46:50
Kinder PinguiÉvite d'utiliser un timer, il vaut mieux utiliser directement l'évènement KeyPress du DrawArea pour la rafraîchir uniquement au besoin.
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
gambix#3 Posté le 23/2/2012 à 18:02:06
Faire simple !ça ne changera rien au scintilement prok


il faut qu'il utilise l'event draw et qu'il rafraichisse a la demande.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
PUBLIC SUB DrawingArea1_Draw()

Draw.Picture(Picture["road.png"], 0, 0)
Draw.Picture(Picture["car.png"], x, y)

'Et vire moi ça!! Menu3.Text = x
END


PUBLIC SUB DrawingArea1_KeyPress()
DIM ltext AS VARIANT
ltext = key.text
menu4.text = ltext
SELECT CASE ltext
CASE "k"
x = x + 10
CASE "h"
x = x - 10
CASE "n"
y = y + 10
CASE "u"
y = y - 10
END SELECT
DrawingArea1.Refresh
Menu3.Text = x 'et met le la :)
END


Surtout pense a mettre cached a false !
Moins de texte dans une signature c'est agrandir son espace.
Prokopy#4 Posté le 23/2/2012 à 18:05:06
Kinder PinguiOui c'est ce que je voulais dire. :)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
spheris#5 Posté le 24/2/2012 à 11:51:25
Merci les gars ça marche !
;)
1