Beste Tweakers,
Ik ben bezig aan mijn eerste C# hobbyprojectje, kwestie van de syntax en object georiënteerd programmeren beter onder de knie te krijgen. Mijn ervaring in C# is beperkt tot zelfstudie en online cursussen, dus alvast mijn excuses als ik "domme" vragen stel.
Mijn hobbyproject is de game "Tetris". Voor de weergave gebruik ik een WPF-form, waarbij vanuit de class GameLoop getekend wordt op het "graphics" object dat ik via de constructor van GameLoop meegeef vanuit de form.
Dat werkt, maar het probleem is dat ik vanuit GameLoop de "Paint" method van de form niet kan aanroepen. Ik heb dat voorlopig opgelost door ook de form als parameter door te geven aan GameLoop, maar dat gaat in tegen alles wat ik tot nu toe geleerd heb over encapsulation:
Ter info: Ik zou dit kunnen oplossen door een timer op de form te zetten en om de zoveel milliseconden het paint event uit te voeren, maar ik zou de gamecode graag zoveel mogelijk willen scheiden van de form.
Alvast bedankt voor jullie hulp!
Ik ben bezig aan mijn eerste C# hobbyprojectje, kwestie van de syntax en object georiënteerd programmeren beter onder de knie te krijgen. Mijn ervaring in C# is beperkt tot zelfstudie en online cursussen, dus alvast mijn excuses als ik "domme" vragen stel.
Mijn hobbyproject is de game "Tetris". Voor de weergave gebruik ik een WPF-form, waarbij vanuit de class GameLoop getekend wordt op het "graphics" object dat ik via de constructor van GameLoop meegeef vanuit de form.
Dat werkt, maar het probleem is dat ik vanuit GameLoop de "Paint" method van de form niet kan aanroepen. Ik heb dat voorlopig opgelost door ook de form als parameter door te geven aan GameLoop, maar dat gaat in tegen alles wat ik tot nu toe geleerd heb over encapsulation:
Ik heb geleerd hoe ik delegates kan gebruiken om van de events in de form methods in een class op te roepen, maar nu wil ik het dus andersom; als de timer in mijn class GameLoop beslist dat het blokje een lijn moet vallen, DAN wil ik dat het paint event van de form wordt aangeroepen (al dan niet via Invalidate). Bestaat hier een oplossing voor?private void Form1_Load(object sender, EventArgs e)
{
DrawingArea = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics oGraphics;
oGraphics = Graphics.FromImage(DrawingArea);
gameLoop = new GameLoop(this, oGraphics);
gameLoop.Start();
}
Ter info: Ik zou dit kunnen oplossen door een timer op de form te zetten en om de zoveel milliseconden het paint event uit te voeren, maar ik zou de gamecode graag zoveel mogelijk willen scheiden van de form.
Alvast bedankt voor jullie hulp!