|
JLI Spieleprogrammierung
|
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
|
Verfasst am: 09.07.2005, 00:10 Titel: Textausgabe an der falschen Stelle |
|
|
Einen wunderschönen Guten Abend
Ich habe mal wieder ein Problem
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
Der verzweifelte Otti _________________ Meine kleine Projekte-Seite |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
t10ottoo Senior JLI'ler
Alter: 40 Anmeldedatum: 15.04.2004 Beiträge: 210 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 09.07.2005, 08:16 Titel: |
|
|
Versteh die Frage nicht
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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.07.2005, 08:24 Titel: |
|
|
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 |
|
|
t10ottoo Senior JLI'ler
Alter: 40 Anmeldedatum: 15.04.2004 Beiträge: 210 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 09.07.2005, 09:43 Titel: |
|
|
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 _________________ Meine kleine Projekte-Seite |
|
Nach oben |
|
|
t10ottoo Senior JLI'ler
Alter: 40 Anmeldedatum: 15.04.2004 Beiträge: 210 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 09.07.2005, 11:15 Titel: |
|
|
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.. *schnüff* _________________ Meine kleine Projekte-Seite |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.07.2005, 11:49 Titel: |
|
|
CPP: | BOOL GetWindowRect(
HWND hWnd, // handle to window
LPRECT lpRect // address of structure for window coordinates
); |
Ich denke, das müsste klar sein |
|
Nach oben |
|
|
t10ottoo Senior JLI'ler
Alter: 40 Anmeldedatum: 15.04.2004 Beiträge: 210 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 09.07.2005, 12:18 Titel: |
|
|
Die Funktion versteh ich, jo
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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.07.2005, 13:03 Titel: |
|
|
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
Gruß DirectXer
EDIT: Ach, ich seh grad, dass du im auch IRC bis. Wennde Fragen hast, können wir uns da unterhalten |
|
Nach oben |
|
|
t10ottoo Senior JLI'ler
Alter: 40 Anmeldedatum: 15.04.2004 Beiträge: 210 Wohnort: Berlin Medaillen: Keine
|
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.07.2005, 13:26 Titel: |
|
|
Patrick hat Folgendes geschrieben: | DirectXer
Bist ja ne richtig gute Vertretung geworden für mich
- Patrick, der nun weiter sein Windows neu aufsetzt. |
Thx |
|
Nach oben |
|
|
|
|
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
|