| 

.NET C# Java Javascript Exception

1
Hallo Leute,
ich wollte mich mal bischen mit Spielen beschäftigen. Ist es von Vorteil, hierbei GDI+ in Verbindung mit VB .NET zu verwenden? Es soll kein high-end 3D Spiel werden, sondern z.b. ein einfaches "2D-Spieler-läuft-auf-2D-Kästchen-rum". Da mir DirectX und OpenGL noch ein wenig zu krass ist wollte ich eben mal fragen, ob es mit GDI+ möglich oder gar sinnvoll wäre.

Gruß
Spicejam
News:
30.09.2010
spicejam 853 2 6
1 Antwort
2
Hallo spicejam,

ja mit GDI+ sind einfach klötzchen Spiele bis hin zu etwas komplexeren Kartenspielen und sehr einfachen Shoutern möglich. Als Beispiel möchte ich hier mal Spiele wie Solitär und Minesweeper nenen. Auch Jump'n'Run-Spiele sind möglich.

Ein Beispiel: Mein erstes Spiel: Snake Klon mit GDI+ (Mit Quellcode) von Peter Bucher

Im wesentlichen musst du dich nur auf das OnPaint-Event deines Forms oder einen Picturebox registieren und dort dann deine Zeichenlogik implementieren.
Dazu brauchst du dann noch das OnKeyDown-Event oder das OnMouseDown-Event um deine Bewerbungs-/Aktionssteuerung zu implementieren.

Image background = Image.FromFile("background.jpg");
Image mensch = Image.FromFile("mensch.gif");

Point playerPosition = new Point(40,40);
Double walkSpeed = 1;
Double walkStep = 10;
...

void OnPaint(Object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;

g.DrawImage(background, 0, 0);
g.DrawImage(mensch, playerPosition.x, playerPosition.y);
}

void OnKeyDown(Object sender, KeyDownEventArgs e)
{
if(e.KeyCode == KeyCodes.Up){
playerPosition.x += walkStep * walkSpeed;
}
else if(e.KeyCode == KeyCodes.Down){
playerPosition.x -= walkStep * walkSpeed;
}
else if(e.KeyCode == KeyCodes.Left){
playerPosition.y -= walkStep * walkSpeed;
}
else if(e.KeyCode == KeyCodes.Right){
playerPosition.y += walkStep * walkSpeed;
}
}
30.09.2010
Floyd 14,6k 3 9
Floyd 14,6k 3 9
Wow, vielen dank. Sogar mit Beispielcode. Was noch eine Frage aufwirft, wäre, wie ich Änderungen die ich zeichne auf der form ohne das flackern aktualisieren kann. Hast du da eine Idee? Bzw. Wie ich OnPaint erneut auslösen kann. Danke :)
spicejam 30.09.2010
1
Du kannst die Control.Invalidate-Methode im Key-Down-Event aufrufen. "Erklärt einen bestimmten Bereich des Steuerelements für ungültig und veranlasst, dass eine Zeichnenmeldung an das Steuerelement gesendet wird." Dh. nach dem aufrufen von Invalidate() wird ein neues Paint-Event ausgelößt. Bei einem Spiel wie Snake musst du Invalidate() in einem Timer alle X millisekunden aufrufen um die automatische Bewerbung der Schlange zu realisieren. Das Flackern bekommst du mit DoubleBuffering weg.
Floyd 30.09.2010
1
zum Beispiel mit: "this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);"
Floyd 30.09.2010
1
http://msdn.microsoft.com/de-de/library/system.windows.forms.control.invalidate.aspx
Floyd 30.09.2010
Vielen Dank! alle meine Fragen sind geklärt! DoubleBuffering hab ich ganz vergessen 8-).
spicejam 30.09.2010
Hab mich gefreut helfen zu dürfen :D Ist ja im moment eh nicht viel los hier :/
Floyd 30.09.2010
Sehr geil hab schon nach 5 Minuten Erfolg eine Map + Spieler. lustig! Ja, irgendwie ist Codekicker eingeschlafen. Ich dachte ich kanns vergessen das mir iher jemand antwortet aber deine Antwort kam ja in Sekunden ^^
spicejam 30.09.2010

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH