JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=fedde027b6fda5100bd19fc5cf231663Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Textausgabe an der falschen Stelle

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
t10ottoo
Senior JLI'ler


Alter: 40
Anmeldedatum: 15.04.2004
Beiträge: 210
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 00:10    Titel: Textausgabe an der falschen Stelle Antworten mit Zitat

Einen wunderschönen Guten Abend Wink

Ich habe mal wieder ein Problem Sad
Hier mal ein Screenshot, denn ich denke, hier sieht man das Problem am besten:

Also wenn ich mein Fenster verschiebe, schreibt er die aktuelle Framerate immer noch an dieselbe Stelle. Soll aber im Fenster stehen, da wo sie ja vorher auch noch stand. Also muss ich ja noch angeben, was er genau aktualisieren soll, also sieht meine Render-Funktion nun folgendermaßen aus:
Code:
void Render(void)
{
   // Eine Struktur für Bliteffekte anlegen
    DDBLTFX DDBltFX;
    // Initialisieren und Größe festlegen
    ZeroMemory(&DDBltFX,sizeof(DDBltFX));
    DDBltFX.dwSize = sizeof(DDBltFX);

   RECT r;
   POINT p1, p2;

   p1.x = 1;
   p1.y = 50;
   p2.x = 100;
   p2.y = 50;

   // Koordinaten aus dem Fenster in Bildschirmkoordinaten umrechnen
   ClientToScreen(hWnd,&p1);
   ClientToScreen(hWnd,&p2);

   r.left = p1.x;
   r.top = p1.y;
   r.right = p2.x;
   r.bottom = p2.y;

   HDC hDC;
    // DC für die Oberfläche anfordern
    if(FAILED(lpDDSPrimary->GetDC(&hDC)))
    {
        Error("DC ist nicht verfügbar");
    }

    // Berechnung der tatsächlichen Framerate
    thisTime   = timeGetTime();
   elapsedTime = thisTime - lastTime;
   lastTime   = thisTime;

   FrameCount++;

   Time = thisTime - FrameTime;
   if(Time > 1000)
   {
      Frames     = (FrameCount * 1000) /  Time;
      FrameTime  = thisTime;
      FrameCount = 0;
   }

   // Framerate ausgeben
    char buf[10];

    sprintf(buf,"%d",Frames);
    // Text und Ellipse ausgeben
    TextOut(hDC,1,50, "Framerate",9);
    TextOut(hDC,100,50, buf,strlen(buf));

   // Wichtig !!! Device Context wieder freigeben
    lpDDSPrimary->ReleaseDC(hDC);

   // Rechteck auf den Bildschirm ausgeben
   if(FAILED(lpDDSPrimary->Blt(&r,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&DDBltFX)))
   {
      Error("Blt ist fehlgeschlagen");
        return;
   }
}

Ausführen tut er es, aber es kommt immer die Meldung "Blt ist fehlgeschlagen" und ich weiß nicht warum.
Aber er schreibts ja trotzdem noch an die falsche Stelle, also wird durch (ein richtig angewendetes) Blt auch nicht behoben sein, oder?

Ich hoffe, ihr helt mir da weiter Smile

Der verzweifelte Otti Smile
_________________
Meine kleine Projekte-Seite
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 07:28    Titel: Antworten mit Zitat

Tipp: Wo fragst Du das Fensterrechteck ab und wo Addierst du die Koordinaten auf Deine Positionskoordinaten?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
t10ottoo
Senior JLI'ler


Alter: 40
Anmeldedatum: 15.04.2004
Beiträge: 210
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 08:16    Titel: Antworten mit Zitat

Versteh die Frage nicht Embarassed
Das da oben ist meine ganze Renderfunktion.

Ich denke, dass es irgendwas mit den Bliteffekten zu tun hat. Irgendwas muss ich noch mit der Variablen "DDBltFX" machen, weiß aber net genau was.
_________________
Meine kleine Projekte-Seite
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 08:24    Titel: Antworten mit Zitat

also, um dir Patrick mal zu erklären:

Er will sagen, dass du die Position in Bildschirmkoordinaten angibst, also die Position des Textes in den kleinen Pixelkoordinaten auf dem ganzen Desktop. Du möchtest aber bestimmt die Textposition auf die Fensterkoordinaten beziehen, oder? Dazu musst du die Fensterposition(dia kannst du abfrage, falls du sie nicht global festgelegt hast) in Bildschirmkoordinaten auf deine jetzigen Textkoordinaten draufaddieren.

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
t10ottoo
Senior JLI'ler


Alter: 40
Anmeldedatum: 15.04.2004
Beiträge: 210
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 09:43    Titel: Antworten mit Zitat

Axo, ich muss abfragen, wo sich zur Zeit das Fenster befindet, und diese dann zu den Koordinaten, wo der Text ausgegebn werden soll, draufaddieren,ahja, werds nachher mal testen und hier Bericht erstatten.

Danke Smile
_________________
Meine kleine Projekte-Seite
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
t10ottoo
Senior JLI'ler


Alter: 40
Anmeldedatum: 15.04.2004
Beiträge: 210
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 11:15    Titel: Antworten mit Zitat

Hmm...hab jetzt nochmal geschaut, finde nirgends sone Funktion, die mir sagt, wie gerade die aktuellen Fensterpositionen sind. in der Render-Funktion von Christians Quellcode steht auch nicht mehr, als bei mir.. Crying or Very sad *schnüff*
_________________
Meine kleine Projekte-Seite
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 11:49    Titel: Antworten mit Zitat

CPP:
BOOL GetWindowRect(
  HWND hWnd,      // handle to window
  LPRECT lpRect   // address of structure for window coordinates
);


Ich denke, das müsste klar sein Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
t10ottoo
Senior JLI'ler


Alter: 40
Anmeldedatum: 15.04.2004
Beiträge: 210
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 12:18    Titel: Antworten mit Zitat

Die Funktion versteh ich, jo Wink

Hier nun der Quellcode
CPP:
RECT r,RWindow;
   POINT p1, p2;

   p1.x = 10;
   p1.y = 50;
   p2.x = 100;
   p2.y = 50;

   // Koordinaten aus dem Fenster in Bildschirmkoordinaten umrechnen
   ClientToScreen(hWnd,&p1);
   ClientToScreen(hWnd,&p2);

   r.left = p1.x;
   r.top = p1.y;
   r.right = p2.x;
   r.bottom = p2.y;

   HDC hDC;
    // DC für die Oberfläche anfordern
    if(FAILED(lpDDSPrimary->GetDC(&hDC)))
    {
        Error("DC ist nicht verfügbar");
    }

    // Berechnung der tatsächlichen Framerate
    thisTime   = timeGetTime();
   elapsedTime = thisTime - lastTime;
   lastTime   = thisTime;

   FrameCount++;

   Time = thisTime - FrameTime;
   if(Time > 1000)
   {
      Frames     = (FrameCount * 1000) /  Time;
      FrameTime  = thisTime;
      FrameCount = 0;
   }

   // Framerate ausgeben
    char buf[10];

    sprintf(buf,"%d",Frames);
    // Text und Ellipse ausgeben

   GetWindowRect(hWnd,&RWindow);

   TextOut(hDC,p1.x + RWindow.left,p1.y + RWindow.top, "Framerate",9);
   TextOut(hDC,p2.x + RWindow.right,p2.y + RWindow.bottom, buf,strlen(buf));

   // Wichtig !!! Device Context wieder freigeben
    lpDDSPrimary->ReleaseDC(hDC);


Aber nun verschiebt sich das trotzdem noch mit. Hab alles mögliche rumprobiert mit den Koordinaten, bekomms einfach net hin. Hrmph...

[edit]
Höö? Wenn ich die beiden Zeilen mit "ClientToScreen" auskommentiere, dann bleibt wenigstens schonmal das Wort "Framerate" an der richtigen Stelle, wenn ich das Fenster verschiebe. Aber die Anzahl der FPS verschiebt sich trotzdem noch falsch...
Also ist von Anfang an außerhalb des Fensters.
_________________
Meine kleine Projekte-Seite
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 13:03    Titel: Antworten mit Zitat

is klar, du gibst die Framerate-Zahl auch plus r.right und r.bottom aus. r.right und r.bottom repräsentieren die letzte untere recht ecke des Fensters. d.h. deine Zahl steht unterm Fester, net im Fenster. Du musst für die Zahl auch die top und left raufaddieren zur Position Wink

Gruß DirectXer

EDIT: Ach, ich seh grad, dass du im auch IRC bis. Wennde Fragen hast, können wir uns da unterhalten Cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
t10ottoo
Senior JLI'ler


Alter: 40
Anmeldedatum: 15.04.2004
Beiträge: 210
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 13:07    Titel: Antworten mit Zitat

Es gehjjjjjt Wink

Besten Dank Embarassed *g*
_________________
Meine kleine Projekte-Seite
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 13:18    Titel: Antworten mit Zitat

DirectXer
Bist ja ne richtig gute Vertretung geworden für mich Very Happy

- Patrick, der nun weiter sein Windows neu aufsetzt.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 09.07.2005, 13:26    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
DirectXer
Bist ja ne richtig gute Vertretung geworden für mich Very Happy

- Patrick, der nun weiter sein Windows neu aufsetzt.


Thx Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum