PictureBox die automatisch refreshed

Status
Niet open voor verdere reacties.

nosmaS

Gebruiker
Lid geworden
22 mrt 2007
Berichten
77
Hoi

Voor een groepswerk (school) Moeten we een kanon(tanks) spel maken

Bij een aantal events moet er op het scherm getekend worden (picturebox)

Het probleem dat ik heb is nadat het landschap (array van points) getekend is en ik laat de tanks (2 ellipsen rond het x en y coordinaat vd tank) tekenen refreshed de picturebox zich

Hij wordt dus terug grijs en ik zie enkel de tanks (die omdat de picturebox niet gerefreshed wordt dus na bewegen een lange zwarte streep worden (wordt later opgelost)

Weet er iemand hoe dit komt en hoe ik het kan verhelpen?
of heeft er iemand een andere werkbare oplossing (ik zou liever niet met bitmaps werken)


groeten
nosmaS

onderstaande functies worden vlak na elkaar opgeroepen


Private Sub drawLandscape()
Dim paper As Graphics = pcbDrawArea.CreateGraphics
'draw landscape
For i = 1 To pcbDrawArea.Width
'land (horizon)
paper.DrawLine(Pens.DarkGreen, landScape(i - 1), landScape(i))
'under horizon
paper.DrawLine(Pens.LightGreen, i, landScape(i).Y + 1, i, pcbDrawArea.Height)
'blue sky
'paper.DrawLine(Pens.LightBlue, i, landScape(i) - 1, i, 0)
paper.DrawLine(Pens.LightBlue, i, landScape(i).Y - 1, i, 0)
Next
End Sub

Private Sub drawTanks()
Dim paper As Graphics = pcbDrawArea.CreateGraphics
'draw actual tanks
For i = 0 To gameVars(0) - 1
paper.FillEllipse(Brushes.Black, tanks(i).xLocation, tanks(i).yLocation, 40, 15)
Next
End Sub
 
om?
ik wil juist dat hij niet refreshed, en dat de inhoud blijft staan
 
Laat eens de code zien waarmee je drawLandscape en drawTanks aanroept?
Dan kan ik zien hoe dat refreshen van de picturebox nu precies werkt bij jou.
 
drawlandscape en drawTanks zijn beide een verzameling van

picturebox.creategraphics . drawline
of drawellips

en nergens wordt de picturebox gerefreshed
 
Het probleem dat ik heb is nadat het landschap (array van points) getekend is en ik laat de tanks (2 ellipsen rond het x en y coordinaat vd tank) tekenen refreshed de picturebox zich

Hij wordt dus terug grijs en ik zie enkel de tanks (die omdat de picturebox niet gerefreshed wordt dus na bewegen een lange zwarte streep worden (wordt later opgelost)
Waar ik aan zat te denken, is dat je - gelijktijdig met het tekenen van je tanks - ook ALTIJD het landschap opnieuw moet tekenen.
Dus:
1. Tank verplaatst zich.
2. Tank wordt getekend.
Teken dan tussen 1 en 2 ook altijd het landschap opnieuw.
Doe je dat niet dan ontstaat die 'streep' want dat zijn gewoon stukjes landschap die niet zijn getekend nadat de tank daar is geweest.
 
die streep is niet het probleem

ik zeg net ik krijg de streep omdat ik niet refresh (wat de bedoeling is)

ik kan het landschap niet elke keer opnieuw tekenen omdat die bijna een halve seconde duurd.

maar toch verdwijnt het landschap en dat mag niet

ik wil dat het landschap net zoals de tanks blijft staan en dat alles er gewoon bovenop getekend wordt
 
Ik snap nu in elk geval dat ik nog niet helemaal snap wat je precies wilt.

Toch maar even verder brainstormend:
Misschien moet je bewuste tekenopdrachten programmeren voor alles wat je wel en niet wilt zien.
In plaats van te leunen op het (niet) refreshen van de picturebox.

Dus als jij wilt dat de tanks een grijze streep achterlaten maak daar dan tekenopdrachten voor. Vroeg of laat refreshet die picturebox zich altijd en ik geloof dat dat iets te maken heeft met hoe windows werkt.
 
Dus ik heb een qchtergrond die getekend wordt (maar die gaat te traag)
dus wil ik die achtergrond niet elke keer opnieuw tekenen
het uiteindelijke plan is om waar de tank voorbij komt het landschap even te "repareren" zodat er geen streep staat
maar voorlopig mag die streep er staan
maar het landschap zou ook moeten blijven staan en dat gebeurd niet

volg je?
 
Maar post hier nog eens je volledige code.
Niet alleen die routines uit je eerste post maar de hele context.
Mits het VB2008.net is, dan kan ik hier eens wat gaan uitproberen
 
Je kunt je spel zelfs (snel) laten tekenen met een Timer.Interval = 1!!! Maar als je iets meer post over vanalles en nog wat, kunnen we misschien een beter werkend voorbeeld in elkaar prutsen:D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan