login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[C#] Graphics probleem

Offline dododedodo - 19/05/2009 23:03
Avatar van dododedodoLid Hoi,

Ik ben bezig om een game te maken. Deze heeft een plaatje als achtergrond. Je kan er hoofdjes wegklikken.

Het probleem is nu als ik niet g.Clear(Color.[kleurtje) gebruik, dat het niet wordt gereset.
DrawPic is een picturebox. Wat kan ik nogmeer gebruiken i.p.v. .Clear om het plaatje te resetten? En als ik probeer na het resetten de achtergrond er terug op te krijgen d.m.v. .DrawImage werkt dit niet.
  1. public void DrawGame()
  2. {
  3. Graphics g;
  4. g = Graphics.FromImage(DrawPic.Image);
  5.  
  6. foreach (cHead Head in Heads.Heads)
  7. {
  8. if (Head.Showing)
  9. {
  10. g.DrawImage(Head.Image, Head.X, Head.Y);
  11. }
  12. }
  13.  
  14. DrawPic.Refresh();
  15. }

11 antwoorden

Gesponsorde links
Offline Abbas - 19/05/2009 23:18
Avatar van Abbas Gouden medaille

Crew .NET
Probeer eens:

  1. JouwPictureBox.Dispose();

Dit laat alle informatie die gekoppeld is aan de Control los, waardoor hij terug in z'n begintoestand komt zeg maar, gereset is dus.. 
Offline dododedodo - 19/05/2009 23:19 (laatste wijziging 19/05/2009 23:20)
Avatar van dododedodo Lid Dat heb ik geprobeerd, maar dat lukt me op de een of andere manier niet? Het scherm wordt dan wit i.p.v. dat er iets op komt.

  1. public void DrawGame()
  2. {
  3. DrawPic.Dispose();
  4. DrawPic.Image = bgImg;
  5.  
  6. Graphics g;
  7. g = Graphics.FromImage(DrawPic.Image);
  8.  
  9.  
  10.  
  11. foreach (cHead Head in Heads.Heads)
  12. {
  13. if (Head.Showing)
  14. {
  15. g.DrawImage(Head.Image, Head.X, Head.Y);
  16. }
  17. }
  18.  
  19. DrawPic.Refresh();
  20. }
Offline Abbas - 19/05/2009 23:21
Avatar van Abbas Gouden medaille

Crew .NET
Dat is dan ook vrij logisch, zoals ik al zei: ALLE informatie gaat dan "verloren" zeg maar. Wat wil je dan bereiken met je reset-functie?
Offline dododedodo - 19/05/2009 23:31
Avatar van dododedodo Lid Zodat ik er nieuwe plaatjes overheen kan zetten. Ik klik op het plaatje, dan gaat het weg. In de code werkt het. Het enige probleem is dat het niet werkt als ik het scherm niet reset. Dan staat het oude plaatje er nog. Het nieuwe wordt wel niet gerenderd maar het oude plaatje gaat niet weg. Hoe los ik dat op?
Offline Abbas - 19/05/2009 23:32
Avatar van Abbas Gouden medaille

Crew .NET
En dit?

  1. pictureBox1.Image = null;
Offline dododedodo - 19/05/2009 23:35
Avatar van dododedodo Lid Dat gaat niet. Dan crasht hij en zegt hij: Waarde van Image kan niet null zijn.
Offline Abbas - 19/05/2009 23:37
Avatar van Abbas Gouden medaille

Crew .NET
Héél raar want ik heb bij het laden van de Form een Image in de PictureBox en als ik op een knop klik doe ik die regel die ik je laatst gaf en is er gewoon weer niets te zien. Ik krijg geen foutmeldingen!
Offline dododedodo - 19/05/2009 23:42
Avatar van dododedodo Lid Hier is mijn project:

Klik!

Het staat in cGame.cs.
Ik heb het idee dat ik sommige dingen omslachtig heb opgelost, maarja, dat krijg je als je nog niet zoveel ervanaf weet.
Offline Abbas - 20/05/2009 00:01
Avatar van Abbas Gouden medaille

Crew .NET
Ok, ik zie dat je dus in 1 PictureBox verschillende Images hebt. 1 voor het lokaal, 1 voor de transparante "laag" en dan de hoofdjes. Wat wil je nu precies weghebben en wat moet er blijven / opnieuw opkomen?
Offline dododedodo - 20/05/2009 00:04
Avatar van dododedodo Lid Ik wil de hoofdjes weg hebben als erop geklikt is. Als erop geklikt is wordt Head.Showing op false gezet en wordt hij dus niet meer erop gezet. Maar het probleem is dat de oude hoofdjes niet weg zijn, dus lijkt het alsof hij er opnieuw opgerenderd wordt. Ik moet dus de hoofdjes weghebben. Die transparante laag heb ik mee uitgeprobeerd of ik zo de image wel goed kon krijgen maar lukte ook niet.

En alvast bedankt dat je me om 00:00 uur nog helpt ;)
Offline Abbas - 20/05/2009 01:37
Avatar van Abbas Gouden medaille

Crew .NET
Volgende code werkt zoals je het in je uitleg wilt:
http://www.plaatscode.be/136572/

Je MOET die Clear() functie gebruiken! Ik heb de declaratie wel op een andere plaats gezet zodat je niet om de milliseconde opnieuw die Graphics gaat declareren. Dit scheelt een hoop rekentijd voor je processor! 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.245s