Threading mit C++
-
was??? Da ist Multithreading eher ein Hindernis.
Wie machst du denn die Abfrage der Tastatur? Zeig mal etwas Code.
-
Hm,
ich denke die Frage ist im Spiele-/Grafikforum besser aufgehoben.
-
Ich schreib so ungefähr so
while(!done) { while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: done = true; break; } } key = SDL_KEY(NULL) //WEI? den genauen Befhelgrad nicht aber ihr wisst sicher // Was ich meine ! if (key = SDL_KEY[UP]) movepaddleup(); // Paddle bewegen if (key = SDL_KEY[DOWN]) movepaddledown(); moveball(); // Hier wird der Ball bewegt }
Die Befehle sind jetzt nicht 100 % korrekt, hab das listing grad nicht hier. Aber die Abfrage und das bewegen mach ich genau hier in dieser schleife.
Das Problem ist jetzt wenn ich einen Knopf drücke, verzweigt das programm ins Paddlemove unterprogramm bewegt das Paddle und springt zurück. Während dieser Zeit läuft der Ball langsamer.
-
Warum reicht dir SDL_Thread nicht? Ist doch dabei und portabel
-
Seid ihr sicher das er einen Extra-Thread dafür brauch
-
Nein - ein extra Thread währe Overhead. Besonders für solche Kleinigkeiten.
Und die 2 Abfragen, die du jetzt hast - sind echt ein Kinkerlitzchen, zur Physik, KI usw.
Hab ja nur gefragt, ob SDL_Thread nicht reicht.
-
Is ja schön das dass ein Kinkerlitzchen ist aber leider bremsen die anderen Sprites ab, sobald man eine Navigationstaste drückt und das sollte nicht sein. Ich hab einen 2,5 GHZ Prozessor also dürfts an dem ja wohl nicht liegen.
Wie fragt ihr den die Steuerung ab, bei euren Games ?
-
while(SDL_PollEvent(&event))
hier wartest du auf ein ereigniss, das macht die ganze sache langsamer. oder nicht ?
ich mache es so
ich warte nicht auf ein ereigniss sondern hole nur das letzte ab, ist vielleicht auch nicht die beste lösung.while(!m_bDone) { //// INPUT //// if(m_pInput->Update()) { if(m_pInput->GetKeyDown(SDLK_ESCAPE)) m_bDone = true; if(m_pInput->GetKeyDown(SDLK_F12)) Screenshot(); if(m_pInput->GetKeyDown(SDLK_TAB)) m_pConsole->m_bActive = !m_pConsole->IsActive(); } // RENDERN } SDL_GL_SwapBuffers(); } /////////////////////////////////////// bool Input::Update() { bool bEvent = true; SDL_Event event; SDL_PollEvent(&event); switch(event.type) { case SDL_KEYDOWN: m_keys[event.key.keysym.sym] = true; break; case SDL_KEYUP: m_keys[event.key.keysym.sym] = false; break; case SDL_MOUSEMOTION: m_MouseX = event.motion.x; m_MouseY = event.motion.y; break; default: bEvent = false; break; } return bEvent; }
-
Ich werds mal ausprobieren, danke für den tipp.
-
if (key = SDL_KEY[UP])
movepaddleup(); // Paddle bewegenif (key = SDL_KEY[DOWN])
movepaddledown();moveball(); // Hier wird der Ball bewegt
Du solltest hier statt dem zweiten "if" ein "else if" oder gleich ne switch anweisung machen. Das macht den Code auch etwas schneller.
i.d.S