|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Andromeda Mini JLI'ler
Anmeldedatum: 28.02.2004 Beiträge: 2
Medaillen: Keine
|
Verfasst am: 28.02.2004, 20:22 Titel: Geschwindigkeit bei SCROLLING2 erhöhen |
|
|
Hallo,
bin neu im Forum hier und möchte erstmal Hallo sagen!
Nun zu meiner Frage:
Mit dem Sourcecode von SCROLLING2 habe ich mich eine Weile beschäftigt und wollte die Geschwindigkeit des Scrollings erhöhen. Allerdings habe ich keine Art von Warteschleife gefunden, also muss die Geschwindigkeit des Scrollings vom PC bzw. von der Grafikkarte abhängen.
Eine Art Notlösung besteht darin, die Anzahl der zukopierenden Spalten auf zwei (oder mehrere zu erhöhen):
Code: | for (int r=0; r<m_ScrollSpeed;r++) {
for(int i=0;i<768;i++) {
PixelsBuffer[i * PitchBuffer + m_ScrollRect1.left + r] = PixelsSurface[i * PitchSurface + m_PosSurface + r];
}
}
// Freigeben der Sperren
m_lpBuffer->UnlockRect();
m_lpSurface->UnlockRect();
if (m_PosSurface <5*1024) {
m_ScrollRect1.left += m_ScrollSpeed;
m_ScrollRect2.right += m_ScrollSpeed;
m_PosSurface += m_ScrollSpeed;
if(m_ScrollRect1.left > 1024) {
m_ScrollRect1.left = 0;
m_ScrollRect2.right = 0;
}
} |
Das führt aber zu deutlichen Rucklern (eigentlich klar, da ja mehrere Spalten übersprungen werden), gibt es eine elegantere Möglichkeit die Geschwindigkeit zu verändern? |
|
Nach oben |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 29.02.2004, 00:46 Titel: |
|
|
bist du dir sicher, das man die scroll-geschwindigkeit nicht programm-intern verändern kann????? weil ein heutiger durchschnitts-pc kann ziemlich schnell scrollen(zuschnell das es einen sinn machen würde....). |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 29.02.2004, 01:36 Titel: |
|
|
Das Scrolling hängt von der Wiederholrate des Bildschirms ab. Beim Flippen wird auf den V-Sync gewartet. Du könntest versuchen, das ganze auf float-Werte umzustellen, da gab es mal einen Thread im Forum, muss du mal suchen...
C. |
|
Nach oben |
|
|
Andromeda Mini JLI'ler
Anmeldedatum: 28.02.2004 Beiträge: 2
Medaillen: Keine
|
Verfasst am: 29.02.2004, 11:00 Titel: |
|
|
Hallo, erstmal danke für eure Antworten.
@nigs:
ja, ich dachte auch das mein PC das eigentlich recht flott hinbekommen sollte.
@Christian:
Meinst du ich sollte m_ScrollSpeed auf float umstellen?
Ich habe in der DirectX Doku mal nachgeforscht und rausgefunden, wie ich die Syncronisation mit dem VSYNC abschalten kann. Es gibt in den D3DPRESENT_PARAMETERS den Member UINT PresentationInterval. Wird er auf D3DPRESENT_INTERVAL_IMMEDIATE gesetzt, dann erfolgt keine Synchronisation mit dem VSYNC. Die Geschwindigkeit des Scrollings hat sich somit fast verdoppelt. (Ist mir aber immer noch zu langsam)
Nebenbei: Ich programmiere hier an einem Laptop mit einer billigen Intel Onboard Grafikkarte.
Code: | // Parameter für den Modus festlegen
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams,sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd;
PParams.Windowed = bWindowed;
PParams.BackBufferWidth = SCR_WIDTH;
PParams.BackBufferHeight = SCR_HEIGHT;
PParams.BackBufferFormat = D3DFMT_A8R8G8B8;
PParams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
|
Folgendes habe ich auch noch ausprobiert, hat aber nicht die gewünschte Wirkung gehabt:
Code: |
void CDirect3D::EndScene(void)
{
m_lpD3DDevice->EndScene();
LPDIRECT3DSWAPCHAIN9 swapChain;
m_lpD3DDevice->GetSwapChain(0,&swapChain);
swapChain->Present(0,0,0,0,D3DPRESENT_DONOTWAIT);
}
|
Hier verwende ich statt der Present Methode des D3DDevice die Present Methode der SwapChain, die einen zusätzlichen Parameter akzeptiert. Laut Doku sollte die Present Methode mit D3DPRESENT_DONOTWAIT nicht mehr auf die Hardware warten. |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 29.02.2004, 13:02 Titel: |
|
|
Man sollte Sowieso niemals ein Programm von Der Bildwiederholrate abhängig machen, dann sind Syncrone Multiplayerpartien so gut wie unmöglich.
Nur als Beispiel: Ein Autorennspiel, bei dem die Geschwindigkeit mit der Bildwiederholfrequenz syncoron läuft, würde bsp. Bedeuten, dass auf jedem Rechner 60 km/h 60 Pixel pro Bild bedeutet. nun schafft der erste Rechner 800 fps und der 2. Rechner 15 fps. der erste Spieler würde sein Auto nich steuern können, der 2. kähm sich wie in einer Schnecke vor - und gegeneinander per Netzwerkmodus könnten sie niemals spielen... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
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
|