Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Performance von QGraphicsView

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.03.2003
    Beiträge
    39

    Performance von QGraphicsView

    Hallo,

    nachdem ich über die Marktreife von KDE4.0 enttäuscht war, habe ich beschlossen nicht rumzumeckern, sondern selber Hand anzulegen und spontan angefangen erstmal qt zu lernen.
    Und da hat es mich vom Hocker gehauen, das Framework ist das beste, was ich bisher gesehen habe. Die Klassen, Container und Widgets erklären sich Grossteils von selbst und bieten einfach immer mehr als man erwartet.

    Naja langer Rede kurzer Sinn, ich hab das Tutorial gemacht (Das mit diesem Kanonenspiel) und habe danach angefangen eine Art Bomberman zu bauen.

    Dazu verwende ich eine QGraphicsScene und packe dort für jeden Block, Boden, Einheit (Player oder NPC), Bombe etc. ein QGraphicsItem (QGraphicsPixmap mit png) rein.
    Ein Feld ist 48x48 px gross und mein Spielbrett besteht momentan aus 15x13 Feldern. Auf dem Feld befinden sich 2 Player, die per Tastatur gesteuert werden können und 5 NPC, die per Zufall laufen.
    Das Problem ist jetzt, dass auf meinem C2D 1.67Ghz dieses Level fast 70%CPU-Last braucht (40% mein Spiel und 30% Xorg)
    Die Operation, die das verursacht ist das regelmäßige setOffset() auf die NPCS (bzw. deren QGraphicsItem), diese laufen per Timer aller 40ms. Oder auch das setOffset() der Player, wenn sie per Tastatur bewegt.
    An meiner "KI (einfach eine Zufallszahl, die zu einer bestimmten wahrscheinlichkeit die Richtung ändert)" oder der Kollisionsabfrage scheint es nicht zu liegen, denn wenn ich das setOffset raus nehme braucht das Programm nur noch schlappe 1-2%.
    Ich habe auch schon mit QT_FLUSH_PAINT=1 überprüft ob auch wirklich nur das gezeichnet wird, was gezeichnet werden soll und ja, es werden nur die Einheiten gezeichnet, die gerade Ihre Position verändern.

    Ich habe jetzt im Internet einiges über Performanceprobleme gelesen und auch schon alle OptimizationFlags gesetzt (das hat vielleicht 5%) gebracht.
    Mache ich da irgendetwas falsch, ist setOffset die richtige Wahl, würde es vielleicht was bringen, die KI nur von Feld zu Feld laufen lassen und dabei QAnimation zu verwenden anstatt setOffset (Aber das führt doch intern auch nur ein setOffset aus - oder?)
    Weil das kann doch nicht sein, dass das so viel Last braucht, KGoldrunner oder was in die Richtung brauchen bei mir maximal 10%.

    Gruss farion

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich glaube die KDE Games Entwickler haben für solche Anwendungsfälle (tilebased graphics) eine eigene GameCanvas Klasse entwickelt.

    Falls du mit Englisch halbwegs zurecht (die meisten der anderen KDE Games Entwickler sind eh auch keine Native-Speaker) kommst, würde ich raten, auf der kde-games-devel Mailingliste zu fragen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •