Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Pizzabroetchen Junior JLI'ler
Anmeldedatum: 29.02.2004 Beiträge: 55
Medaillen: Keine
|
Verfasst am: 04.03.2004, 20:05 Titel: Scrolling 2 Frage |
|
|
Hallo,
ich bin jetzt beim scrollen angekommen und verstehe das nicht so ganz:
// testen, ob das Rechteck breiter als ein Pixel wird
if(m_ScrollRect1.left != m_ScrollRect1.right)
{
// neues Rechteck konstruieren
r1.left = 0;
r1.right = 1024 - m_ScrollRect1.left;
r1.top = 0;
r1.bottom = 768;
m_lpD3DDevice->StretchRect(m_lpBuffer,&m_ScrollRect1,m_lpBackBuffer,&r1,D3DTEXF_NONE);
}
// testen, ob das Rechteck breiter als ein Pixel wird
if(m_ScrollRect2.left != m_ScrollRect2.right)
{
// neues Rechteck konstruieren
r2.left = 1024 - m_ScrollRect2.right;
r2.right = 1024;
r2.top = 0;
r2.bottom = 768;
m_lpD3DDevice->StretchRect(m_lpBuffer,&m_ScrollRect2,m_lpBackBuffer,&r2,D3DTEXF_NONE);
}
// die Oberfläche m_lpBuffer sperren und einen Zeiger
// auf die der Oberfläche Pixel holen
D3DLOCKED_RECT LockedRectBuffer;
m_lpBuffer->LockRect(&LockedRectBuffer,NULL,0);
int PitchBuffer = LockedRectBuffer.Pitch / 4;
D3DCOLOR* PixelsBuffer = (D3DCOLOR*)LockedRectBuffer.pBits;
// die Oberfläche m_lpSurface sperren und einen Zeiger
// auf die der Oberfläche Pixel holen
D3DLOCKED_RECT LockedRectSurface;
m_lpSurface->LockRect(&LockedRectSurface,NULL,0);
int PitchSurface = LockedRectSurface.Pitch / 4;
D3DCOLOR* PixelsSurface = (D3DCOLOR*)LockedRectSurface.pBits;
// Kopieren einer Spalte aus m_lpSurface in m_lpBuffer
for(int i=0;i<768;i++)
{
PixelsBuffer[i * PitchBuffer + m_ScrollRect1.left] = PixelsSurface[i * PitchSurface + m_PosSurface];
}
// beide Oberflächen entsperren
m_lpBuffer->UnlockRect();
m_lpSurface->UnlockRect();
// testen, ob noch gescrollt werden soll, oder ob
// das Ende der Grafik erreicht wurde
if(m_PosSurface < 5*1024)
{
m_PosSurface++;
m_ScrollRect1.left++;
m_ScrollRect2.right++;
if(m_ScrollRect1.left > 1024)
{
m_ScrollRect1.left = 0;
m_ScrollRect2.right = 0;
}
}
}
ScrollRect1.left und ScrollRect2.right werden ja immer um 1 erhöht.
Aber wenn der pc dann oben rechnet r2.left=1024-ScrollRect.right ergibt das doch eine negative Zahl.Genau so wenn StretchRect(m_lpBuffer,&m_ScrollRect2.. ausgeführt wird, gibt der ja dann ein rechteck mit 1025+ als xlänge an...aber so breit ist das Surface doch gar nicht
Wäre echt super wenn mir da mal einer weiter helfen könnte
Mfg |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 04.03.2004, 20:12 Titel: |
|
|
Hast du schonmal versucht mit dem Debugger durchzusteppen? Das ist denke ich in diesem Fall die beste Methode zu verstehen was passiert. |
|
Nach oben |
|
|
Pizzabroetchen Junior JLI'ler
Anmeldedatum: 29.02.2004 Beiträge: 55
Medaillen: Keine
|
Verfasst am: 04.03.2004, 20:55 Titel: |
|
|
das habe ich versucht....aber der sagt mir das das Programm keine Debug Informationen enthält und wenn ich haltepunkte setze aktzeptiert der die nicht
Scrolling2 ist mir auch soweit klar bis auf dem teil wo das r2 rechteck mit werten bestückt wird..... |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 04.03.2004, 21:05 Titel: |
|
|
Versuch mal Projekt->aktive Konfiguration festlegen->Debug
Christian |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 04.03.2004, 21:07 Titel: |
|
|
Pizzabroetchen hat Folgendes geschrieben: | aber der sagt mir das das Programm keine Debug Informationen enthält |
Dann musst du die Konfiguration von Release auf Debug setzen. (Erstellen->Aktive Konfiguration festlegen) Dann sollte es funzen
<edit>
Mist, da war Christian schneller
</edit> _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 04.03.2004, 21:23 Titel: |
|
|
@TLoP: Dafür ist deins richtiger |
|
Nach oben |
|
|
Pizzabroetchen Junior JLI'ler
Anmeldedatum: 29.02.2004 Beiträge: 55
Medaillen: Keine
|
Verfasst am: 04.03.2004, 21:29 Titel: |
|
|
ahhh ich danke euch vielmals!
habe es umgestellt und nun klappts
also wenn ich das jetzt richtig verstanden habe springt der wenn man den gültigen Bereich verläßt (der Puffer hat ja nur 1024 auf der X-Achse), das heißt auf 1025 erhöht, automatisch wieder zum anfang der X-Achse
habe ich das nun richtig verstanden.....zum mind. erklärt das so wie das mit dem scrollen funktioniert
mfg |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 04.03.2004, 21:33 Titel: |
|
|
Hast du richtig verstanden, dadurch erreicht man, dass es nach Scrolling aussieht, obwohl nur Speicher kopiert wird. Interessant wäre sowas mal für vertikal und horizontal (also diagonal ) zu programmieren.
C. |
|
Nach oben |
|
|
|