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

11

08.01.2009, 16:45

Zitat

Ich würde schätzen, dass es an dem else liegt...

Kann sein.
Wenn ich das richtig sehe, ist der Code ab "frame.Update();" außerhalb des If und wird immer ausgeführt.

Ich mache nichts mit der SDL.
Vielleicht ist es ja was SDL-spezifisches.

Hast du die sleep-Variante von David_pb mal ausprobiert?
fka tm

12

08.01.2009, 16:54

Den Code ab frame.Update() habe ich auch in die if gepackt, die Auslastung war trotzdem bei 100%
Die else-Anweisung läuft einfach dauerhaft durch, denn auch wenn gar nichts in der else steht, ist die Auslastung bei 100%

13

08.01.2009, 17:06

Schmeiß doch mal alles aus der Schleife raus und lass dir z.B. nur ein leeres Fenster anzeigen.
Dann fügst du die SDL-Funktionen stückweise wieder ein und entlarvst so den Ressourcenfresser?
fka tm

14

08.01.2009, 17:08

Das hatte ich doch gemacht und es hat trotzdem 100% verbraucht...
Habe nun etwas gefunden, was jedoch nicht die Lösung sien kann, da die Steine nun nicht mehr regelmäßig runterkommen (ist auch klar warum):

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
while (GetMessage(&msg, NULL, 0, 0))
   {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
if((SDL_GetTicks()-tick)/speed>=0.1){
                tick=SDL_GetTicks();
                if(spielfeld.check_valid(&m_block_now->klotz[0][0], m_block_now->x, ((m_block_now->y)+1), true)&&(m_block_now->y < 20))
                {
                    m_block_now->y+=1;
                }
                else
                {
                    spielfeld.insert(&m_block_now->klotz[0][0], m_block_now->x, m_block_now->y, m_block_now->ID);
                    next_block();
                }
                frame.Update();
                frame.Slock();
                background->Render(frame.GetScreen());
                show(frame.GetScreen(), &m_block_now->klotz[0][0], m_block_now->x, m_block_now->y, m_block_now->ID);
                show(frame.GetScreen(), &m_block_next->klotz[0][0], 13, 0, m_block_next->ID);
                spielfeld.show(frame.GetScreen());
                frame.Flip();
            }
}

15

08.01.2009, 17:13

Oops, jetzt hast du die Logik aber etwas verunstaltet.

Wo sind denn die SDL'ler hier, die mal Aufklärung bringen?
fkrauthan!!!
fka tm

16

08.01.2009, 17:16

Hab ja gesagt, dass das nicht funktionieren kann...
Das funktioniert ja eigentlich nur bei WinAPI GUIs die auf eine Nutzereingabe warten sollen...
Bin nur schon so verzweifelt, dass ich alles durchprobiere.

Bei deiner Lösung war es ja auch wieder ne Dauerschleife, was automatisch 100% Auslastung bedeutet (oder nicht?)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

17

08.01.2009, 17:21

Dann benutz doch mal Sleep..

Ob du den Wert da dynamisch machst, oder nicht ist ja dir überlassen.. (so einen FPS Thread hatten wir hier ja schon..).

18

08.01.2009, 17:28

Das kann doch wohl nicht die einzige Lösung sein, oder?

Wie ich im 1. Post schon sagte, würde ich gerne auf Sleep() verzichten

(Wenn der Nutzer genau in einem "falschen" Moment (der Moment an dem gesleept wird) eine Taste nur kurz drückt wird dies nicht erkannt. Außerdem kommt es einem durch Sleep sowieso schon so vor, als wäre die Steuerung träge, da die Wahrscheinlichkeit den Sleepmoment zu erwischen viel höher ist, als diesen aben nicht zu erwischen)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

19

08.01.2009, 17:31

Zitat von »"Thunaer"«

Das kann doch wohl nicht die einzige Lösung sein, oder?

Wie ich im 1. Post schon sagte, würde ich gerne auf Sleep() verzichten


Warum nicht? - Du kannst ja in dem Takt, indem die Blöcke fallen die Schlaufe laufen lassen.. Oder du machst es, wie bis anhin und sendest halt nach einer gewissen Zeit eine Message. (Müsset man dann aber Threads machen..)

20

08.01.2009, 17:35

Hm das warum hab ich ja noch dazu editiert.
Die Lösung mit den Threads klingt interessant.
Wie genau sollte ich das dann machen?

Werbeanzeige