JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Geschwindigkeit bei SCROLLING2 erhöhen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Andromeda
Mini JLI'ler



Anmeldedatum: 28.02.2004
Beiträge: 2

Medaillen: Keine

BeitragVerfasst am: 28.02.2004, 20:22    Titel: Geschwindigkeit bei SCROLLING2 erhöhen Antworten mit Zitat

Hallo,

bin neu im Forum hier und möchte erstmal Hallo sagen! Very Happy
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
Benutzer-Profile anzeigen Private Nachricht senden
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 29.02.2004, 00:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 29.02.2004, 01:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Andromeda
Mini JLI'ler



Anmeldedatum: 28.02.2004
Beiträge: 2

Medaillen: Keine

BeitragVerfasst am: 29.02.2004, 11:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 29.02.2004, 13:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik 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