tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1361
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Luke499 Luke499 ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    5
    Ich bin gerade dabeit ein Spiel mit GDI+ zu machen. (Andere Grafikmethoden krieg ich im mom. nicht gebacken)
    Dieses läuft in Echtzeit ab, d.h. es muss dauernd aktualisiert werden. Doch umsomehr Objekte ich benutze, umso mehr stockt das ganze.
    Nur die meisten Objekte verändernsich im Laufe des Spieles nicht / nur ein paar mal, werden aber trotzdem bei jeder aktion neugezeichnet.
    Da sind wir auch schon an meinem Problen angelangt:
    Kann ich mit GDI+ mehrere Zeichenebenen machen? Also als ob ich mehrere panels übereinander legen würde, und in jedes mit gdi+ zeichnen würde, und dann halt nur die aktualisiere, in der sich wirklich was geändert hat?
     
    $me = Human::factory();
    if ($me instanceof Human) die();

  2. #2
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Du kannst dich hier mit Transparenzen spielen, vielleicht hilft dir das was (mehrere Panels verwenden, diese transparent setzen). Grundlegend würde ich aber meinen, dass GDI+ hier eventuell nicht die ganz richtige Wahl ist ... vor allem wenn du ein Echtzeit-Spiel entwickeln willst. Hier solltest du dich dann doch in DirectX einlesen.
     

  3. #3
    Avatar von Peter Bucher
    Peter Bucher Peter Bucher ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Ort
    Zentralschweiz
    Beiträge
    31
    Hallo zusammen

    Mehrere Ebenen kannst du machen, indem du hintereinander zeichnestt, oder wie Norbert geschrieben hat, mit Transparenz.
    Was für ein Spiel soll denn das mal werden?

    Sobald es etwas komplexer wird, vorallem bei Echtzeit, kommt man mit GDI+ schnell an die Grenzen, das musste ich am eigenen Leibe erleben )
    Man kann den Code zwar "optimieren", jedoch wird das schnell relativ kompliziert und unleserlich. Die resultierende Performance rechtfertigt das auch niemals.

    Ich würde dir empfehlen, dich in DirectX einzulesen, es lohnt sich.
    Am Anfang ist es zwar relativ komplex, jedoch hat man im 2D Bereich trotzdem schnell was zusammen.
    Also alles was über ein Bomberman oä. herausgeht, sollte man m.E. nicht mehr mit GDI+ machen.


    Gruss Peter
     
    Microsoft MVP - Visual Developer ASP / ASP.NET

    http://www.aspnetzone.de/blogs/peterbucher/ - Auf den Spuren von .NET
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    http://www.mycsharp.de/ - C# / .NET Community

  4. #4
    Avatar von the incredible Leitman
    the incredible Leitman the incredible Leitman ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    ÖSTERREICH
    Beiträge
    406
    Ich habe auch das Problem, mit mehreren Ebenen.

    Ich habe ein Panel, auf dem ich einen zeitlichen Verlauf darstellen möchte.
    Also grundlegen einmal Beschriftungen und dergleichen, die sich nicht (häufig) ändern.

    Nun möchte ich einen Zeitstrahl einfügen, der sich sekündlich darüber bewegt...

    Wie könnte ich das realisieren?

    Wenn ich alles neu zeichne, wirkt sich das irrsinnig auf die Performance auf und ist eigentlich nicht notwendig.

    Ich habe bereits versucht, bei jedem Timer_Tick Event von einer Sekunde ein neues Graphics Object zu erstellen, in dem ich den Strahl und die Zeit als Text reinzeichne.
    Jedoch ist das deshalb ein Problem, da ich den vorigen Strahl nicht lösche, dieser immer größer wird und irgendwann einmal den kompletten Bildschirm ausfüllt, wenn ich die komplette Form nicht aktualisiere.
    Mit der Methode "Clear" kann ich das Graphics Object nicht wirklich löschen, lediglich mit einer Farbe ausfülllen... Das Problem ist nun, dass das hinterliegende Bild nicht einfärbig ist, und ich die momentane Farbe nicht kenne.

    Habe auch schon versucht, mit "Color::Transparent" bezw. "Empty" zu arbeiten,
    aber dann wird das Object schwarz

    Hat irgendjemand ideen?
    Wie könnte ich das lösen?

    mfG
    the incredible Leitman
     
    Meine Blogs:
    theIncredibleLeitman.blogspot.com // Tec
    Gamesdev.de // Gamedevelop

    Ein echter Programmierer hat nur natürliche 3 Feinde:
    • Sonnenlicht
    • Frischluft
    • und das unerträgliche Gebrüll der Vögel
    Ownage
    steht für die Fähigkeit einer Person, andere zu ownen, zum Beispiel „Ich habe die totale ownage.“ Gleichzeitig kann es aber auch die positive Qualität einer Sache beschreiben: „Counterstrike owns!“
    (siehe:http://de.wikipedia.org/wiki/Computerspieler-Jargon)

  5. #5
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    Eine Möglichkeit für solche Probleme stellt die Verwendung mehrerer Bitmap-Objekte oder GraphicsBuffer-Objekte dar. Relativ statischer Hintergrund wird dabei einmal in eine Bitmap gerendert, während ein Thread dafür sorgt, dass eine andere Bitmap für dynamische Elemente freigegeben, neu erstellt und neu gerendert wird. Anschließend werden die Bitmap-Objekte in der richtigen Reihenfolge per DrawImage gezeichnet.

    GDI+ ist allerdings für Spiele zu langsam und eigentlich auch nur auf Windows-Forms-Controls ausgelegt. Für schnelle graphische Operationen rate ich ebenfalls, sich mit DirectX zu beschäftigen!

    Ich hoffe, dass ich weiterhelfen konnte.

    Gruß
    PhoenixLoe
     

Ähnliche Themen

  1. Excel Daten in MSSQL 2005 importiern mit vb 2005
    Von fanxin im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 18.04.08, 13:05
  2. nDoc für .Net 2005 und VS 2005
    Von Freak2k im Forum .NET Café
    Antworten: 9
    Letzter Beitrag: 23.10.07, 14:34
  3. Antworten: 1
    Letzter Beitrag: 21.06.07, 00:10
  4. .Net 2.0 + Visual Studio 2005 + SQL Server 2005 released
    Von Nico Graichen im Forum Coders Talk
    Antworten: 0
    Letzter Beitrag: 28.10.05, 16:00