Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.06.2008, 14:35

SDL -> Volldbild verändert spiel

Hi,

Ich hab follgendes Problem:

Mein Spiel, das ich grade programmiere funktioniert wunderbar solange ich mich im Fenstermodus befinde:

C-/C++-Quelltext

1
    if (g_pFramework->Init (800, 600, 16, false) == false)


Wenn ich aber im Vollbildmodus starten möchte verlaufen alle Bewegungsabläufe der Spielerfigur extrem langsam. Alles andere bewegt sich aber noch normal..

Ich kann nicht verstehen, wo hier die Gründe liegen zumal sich am eigentlichen Spiel ja nichts verändert nur das ich halt so:

C-/C++-Quelltext

1
    if (g_pFramework->Init (800, 600, 16, true) == false)


im Vollbildmodus starte..

Anonymous

unregistriert

2

21.06.2008, 14:50

Dein Framework kennt kein Mensch, benötigen mehr Input. Kristallkugel Defekt.

3

21.06.2008, 14:55

Okey, du hast recht, war wohl recht nichts sagend der Code von oben..

Naja hier ist die zugehörige Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Init

//

// Aufgabe: Framework initialisieren

//

bool CFramework::Init (int ScreenWidth, int ScreenHeight,
                       int ColorDepth, bool bFullscreen)
{
  // Alle Systeme der SDL initialisieren

  if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1 )
  {
    cout << "SDL konnte nicht initialisiert werden!" << endl;
    cout << "Fehlermeldung: " << SDL_GetError () << endl;

    Quit ();

    return (false);
  }

  // Vollbild oder Fenstermodus einstellen

  if (bFullscreen == true)
  {
    m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth,
                                 SDL_HWSURFACE | SDL_DOUBLEBUF | 
                                 SDL_FULLSCREEN);
  }
  else
  {
    m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth,
                                 SDL_HWSURFACE | SDL_DOUBLEBUF);
  }

  // Prüfen, ob alles funktioniert hat

  if (m_pScreen == NULL)
  {
    cout << "Videomodus konnte nicht gesetzt werden!" << endl;
    cout << "Fehlermeldung: " << SDL_GetError () << endl;

    Quit ();

    return (false);
  }

  // Zeiger auf internes Array für Tastaturstatus ermitteln

  m_pKeystate = SDL_GetKeyState (NULL);

  // Alles ging glatt, also true zurückliefern

  return (true);

} // Init

Anonymous

unregistriert

4

21.06.2008, 15:10

Wie sehen deine Zeitberechnungen aus? Wenn du keine Zeitberechnungen für die Bewegungen drin hast, ist das verständlich das es Probleme gibt, da im Fenstermodus andere "Zeiten" (Wiederholungsraten) herrschen als im Vollbildmodus.

5

21.06.2008, 15:46

Ich hab das wie in dem Buch das ich kürzlich gelesen habe geregelt, dass alle Bewegungsabläufe mit der Zeit (in Sekunden multiplieziert werden) die ein Durchlauf benötigt..

Z.b hier soll die Figur pro Sekunde 400 Pixel laufen. Auf einem schnellen Rechner 60 FPS würden diese 400 Pixel also mit 0.017 multipieziert werden. Auf einem langsamen Rechner 30 FPS würden die 400 Pixel mit 0.034 multiplieziert werden. Also würde die Figur immer noch 400 Pixel pro Sekunde laufen allerdings pro Frame mehr Pixel laufen.

C-/C++-Quelltext

1
2
3
                //Wenn nein -> Nur Laufen möglich

                m_MoveSpeed = 400 * g_pTimer->GetElapsed (); //Movespeed speichern..

                m_XKoordinate += m_MoveSpeed;


Ich denke das sollte doch so richtig sein. Gibt es evtl noch eine andere Ursache die ich bei der Fehlersuche untersuchen könnte?

Ba'el

Alter Hase

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

6

21.06.2008, 16:45

naja wenn du das über die Pixel berechnest, dann is's ja ganz klar

ich vermute mal das sich dein Spielfeld (oder was auch immer du benutzt) sich im Vollbildmodus nicht verändert (wenn Punkt A ganz links am Rand ist ist er auch im Vollbildmodus ganz links am Rand, sprich alles wird skaliert), alles andere wäre ja auch seltsam ... das is' jetzt ma' meine Annahme

so dann hättest du ja zwischen PunktA (ganz links) und PunktB (ganz rechts) im Fenstermodus 800px
im Vollbildmodus, bei sagen wir ma' 1600x1200 Auflösung, 1600px zwischen A und B, brauchst also doppelt so lang , obwohl sich am Spielfeld nix ändert

eine mögliche Lösung wäre es beim Start sich die Auflösung des Rechners zu holen und diese in die Berechnung Einfließen zu lassen

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
if(m_bFullscreen)
{
                m_MoveSpeed = (m_iAuflösungX/800)*400 * g_pTimer->GetElapsed (); //(1600/800)*400 = 800 -> richtige Geschwindigkeit

                m_XKoordinate += m_MoveSpeed;
}
else
{
//Wenn nein -> Nur Laufen möglich

                m_MoveSpeed = 400 * g_pTimer->GetElapsed (); //Movespeed speichern..

                m_XKoordinate += m_MoveSpeed;
}



naja, vielleicht lieg' ich och falsch ... kannste ja ganz einfach testen ;)
aktuelle Projekte:
Ruby on Rails
XNA &amp; Touchless
Progr. mobiler Endgeräte (GPS Trekking)

7

21.06.2008, 17:37

Hmm war eine gute Idee. Leider ist es aber nicht die Lösung, weil ja bei der Intaliesierung in der SDL Funktion SDL_SetVideoMode die Auflösung festgelegt wird. DIese ist sowohl im Vollbild als auch im Fenstermodus bei 800x600..

8

22.06.2008, 00:39

Re: SDL -> Volldbild verändert spiel

Zitat von »"Abcd1234"«


Wenn ich aber im Vollbildmodus starten möchte verlaufen alle Bewegungsabläufe der Spielerfigur extrem langsam. Alles andere bewegt sich aber noch normal..

Was ist mit alles andere gemeint?
Wenn die anderen Animationen unverändert und mit dem gleichen Tempo ablaufen, würde ich ganz gerne mal sehen, womit du deine Animation der Spielfigur berechnest.

9

23.06.2008, 20:03

Ich hab jetzt nochmal den Vollbildmodus getestet und musste feststellen, dass die Bewegungsabläufe nun völlig normal sind. Ich kann es mir nicht erklären, da ich an den Bewegungsberechnungen keinerlei veränderungen vorgenomen habe sondern an anderer Stelle gearbeitet habe, die mit dem Problem in keinerlei Weiße in Verbindung stehen. Naja trotzdem schön, dass sich ein Problem von selber gelöst hat :)

Allerdings habe ich im Vollbildmodus mit meinem Rechner massive Frame einbrüche. Ich habe einen Test mit ca 200-300 Gegnern gleichzeitig gemacht dieser lief im Fenstermodus noch völlig flüssig aber im Vollbildmodus zwingt das meinen Rechner in die Knie.. "CoreDuo6600, 2 Gb Ram, 8800 ULtra" und es ist doch nur ein 2D Spiel..

Ist wirklich zwischen Fenster und Vollbildmodus so ein gravierender Unterschied oder könnte es daran liegen, dass ich noch im Debbugmodus starte?

Schnitter

Treue Seele

Beiträge: 141

Wohnort: Remshalden

Beruf: Schüler

  • Private Nachricht senden

10

23.06.2008, 21:23

am Debugmodus kanns liegen, nimm lieber Release.

Aber theoretisch sollte es doch im Vollbildmodus schneller laufen, oder?

Werbeanzeige