Avatar billede j1x4r4 Nybegynder
22. april 2009 - 18:09 Der er 5 kommentarer og
1 løsning

Grafisk visning af spil i C#

Hey Eksperter

Jeg mangler lidt råd og vejledning om hvordan man bør generere hver frame til et spil.

Jeg er igang med at lære C#, og har derigennem kastet mig over et lille fritidsprojekt. Projektet går i sin enkelthed ud på at lave et typisk Tower Defense. Selve programmeringen af spillet er ved at være på plads. Alle enheder i spillet har en X og en Y, samt en Rotation værdi.

Nu skal det blot ud på skærmen. Jeg tænker lidt på at bygge en klasse der genererer et Bitmap, som efterfølgende placeres i en GUI. Tanken er så at GUI'en har en timer der invaliderer det hele, og derpå genereres Bitmappet igen, og indsættes igen.

Men er det den rigtige måde at gøre det på? Er der nogle som har et godt råd?
Avatar billede j1x4r4 Nybegynder
22. april 2009 - 22:18 #1
Jeg har tænkt lidt på om man måske kunne smide disse beregninger over på grafikkortet, evt. om vejen frem er DirectX ?
Avatar billede aaberg Nybegynder
23. april 2009 - 08:52 #2
Alle spil har et game-loop. For hver iteration i dette loop, skal skærmen opdateres. En nem måde at lave et game-loop på i en Windows Form, er at override OnPaint metoden, og invalidere skærmen i slutningen av denne metode.

eksempel:

protected override void OnPaint(PaintEventArgs e)
{
  base.OnPaint(e);

  // Indsæt kode som tegner skærmen her!

  this.Invalidate();
}

For at finde ud af hvor meget du skal flytte på de bevægelige objekter i spillet, skal du vide hvor lang tid der er gået siden sidste iteration i game-loopet. Brug gerne System.Diagnostics.Stopwatch klassen til dette.

Jeg tror det er en god ide at prøve at programmere dette uden brug af direct-x i første omgang. Begynder du med direct-x, bliver det en hel del mere kompliceret.

Når du har lyst til at kaste dig ud i direct-x programmering, kan jeg anbefale at prøve XNA Game Studio, som er en overbygning til Visual Studio 2008 og Visual Studio Express 2008.
http://creators.xna.com
Avatar billede j1x4r4 Nybegynder
23. april 2009 - 10:32 #3
Det lyder meget spændende :)

Men skal jeg fortsat benytte Bitmap, som genereres hvergang OnPaint() kaldes, eller skal jeg tegne nogle Graphicspath direkte i GUI elementet?

XNA lyder spændende, jeg vil kigge videre på det, når jeg føler mig lidt mere sikker på benene :)
Avatar billede aaberg Nybegynder
23. april 2009 - 14:43 #4
Tegn direkte på din form ved hjælp af e.Graphics objektet, som følger med som parameter. Ikke brug en Bitmap. At tegne direkte på formen giver bedre performance. Men sørg for at tilføje DoubleBuffered = true; i konstruktøren, ellers vil skærmen flimre.

Og husk... google er din ven, så leder du efter små eksempler, så findes der massere derude.

Jeg fandt hurtigt denne artikel, som jeg ved første øjekast synes ser god ud:
http://blogs.msdn.com/coding4fun/archive/2007/02/20/1727608.aspx
Avatar billede j1x4r4 Nybegynder
23. april 2009 - 15:43 #5
Okay, det svarer vist på det hele indtil videre :)

Vil du være så venlig at ligge et svar, så du kan modtage dine point?
Avatar billede aaberg Nybegynder
24. april 2009 - 07:58 #6
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I dag 20:46 opkaldside Af hagbartm i Mobiltelefoner
I dag 16:05 win 10 vil ikke boote Af bb69 i Windows
I dag 11:20 Lenovo x390 Af tobberjas i PC
I dag 10:14 Alder i Excel Af Nanarsi i Excel
I dag 09:00 Flere linier på faneblad Af Peder Lund Nielsen i Excel