Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'Hintergrundtile: For i0 = 0 To currentmap.width For i1 = 0 To currentmap.height With currentmap.backgroundtile G.DrawImageUnscaled(.img, i0 * 16 - inplayer.position.X + 10 * 16, i1 * 16 - inplayer.position.Y + 7 * 16) End With Next Next |
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
//Hintergrund-Tile for (int i1 = 0; i1 < inmap.GetWidth(); i1++) { for (int i2 = 0; i2 < inmap.GetHeight(); i2++) { rendertarget.DrawBitmap(inmap.GetBGTile().GetSprite(), new Rectangle((i1 * 16) - (inplayer.GetPosition().GetX() * 16) + ((res.Width / 2) - 16), (i2 * 16) - (inplayer.GetPosition().GetY() * 16) + ((res.Height / 2) - 16), 16, 16)); } } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LeBusch« (16.11.2013, 21:24) aus folgendem Grund: Kleinen Copy&Paste-Fehler beim C#-Code überarbeitet.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Das Problem ist ja eben gerade, dass sie meiner Meinung nach mehr Idle-Zeit haben sollte, da das eigentliche Rendering ja größtenteils über die GPU statt über die CPU läuft. Daher müsste die "neue" Schleife der Theorie nach schneller als die "alte" sein. Ich stelle mir das ganze so vor:Solange Du der CPU sagst sie soll was tun, solange tut sie auch was. Wenn sie nichts tun soll, musst Du auch dafür sorgen, dass sie solche Zeit zugesprochen bekommt.
Ich hatte bisher nur gelesen, dass man DirectDraw nicht mehr benutzen soll, weil es veraltet ist. Weshalb sollte man D2D denn nicht mehr verwenden?Direct2D solltest Du übrigens nicht mehr verwenden.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (16.11.2013, 22:56)
Schon vergessen Da alles in einem Thread abläuft, muss die CPU auf die GPU warten - so stelle ich mir das zumindest vor. Für den Zeitraum, in dem die GPU mit D2D.Drawbitmap() beschäftigt ist, müsste die CPU ja quasi arbeitslos sein.
Wieso sollte die CPU in den Leerlauf schalten, wenn Du ihr die ganze Zeit etwas zu tun gibst?
Vergiss den Kommentar zu Direct2D, ich hatte DirectDraw im Kopf
In dieser Schleife ist es immer das gleiche Sprite. Diese Ebene soll den Boden darstellen, auf den dann im nächsten Schritt der Spieler und alle anderen Tiles gezeichnet werden.
Zeichnest du in dieser Schleife immer das gleiche Sprite oder sind das alles verschiedene Sprites, die da an DrawBitmap() übergeben werden?
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
private DateTime nexttime = DateTime.Now; [...] if (DateTime.Now >= nexttime) { //rendern [...] nexttime = DateTime.Now.AddMilliseconds(Convert.ToInt32(1000 / frequency)); } |
Quellcode |
|
1 |
G.DrawImageUnscaled(.img, i0 * 16 - inplayer.position.X + 10 * 16, i1 * 16 - inplayer.position.Y + 7 * 16) |
C#-Quelltext |
|
1 2 3 4 |
rendertarget.DrawBitmap(inmap.GetBGTile().GetSprite(), new Rectangle((i1 * 16) - (inplayer.GetPosition().GetX() * 16) + ((res.Width / 2) - 16), (i2 * 16) - (inplayer.GetPosition().GetY() * 16) + ((res.Height / 2) - 16), 16, 16)); |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Werbeanzeige