Alternative zu Multithreading?
-
EDIT: Wusste nicht wohin damit, da mein Spielchen in C++ geschrieben ist, dachte ich ich ich pack es erst mal hier hin.
Hallo, gibt es noch eine Alternative zu Mutlithreading? Ich hab mich mal ein bisschen hier und bei Google umgeschaut und irgendwie ist mir das Thema MUltithreading noch etwas zu Kompliziert. Mir geht es darum das 2 Schleifen gleichzeitig laufen (versuche gerade einen Gegner der sich auf dem Kürzesten Wege dem Spieler nähert in mein Game einzubauen. Da der Gegner aber jedes mal ein paar millisekunden wartet bevor er sich weiter bewegt, damit er nicht gleich beim Spieler ist, kann ich nicht auch die Inputabfrage des (menschlichen) Spielers in die Schleife einbauen da sich dann der Spieler auch so langsam bewegen würde
). Gibt es da noch alternativen?mfg Frusciante²
-
Du kannst auch Timerabfragen machen, also eine reine Zeitmessung in deiner Hauptschleife. Mache ich auch so. Immer die Millisekunden auslesen und wenn eine Differenz überschritten wurde, die Aktion ausführen und die letzte Zeit merken, für die nächste Differenz.
Multithreading ist eigentlich nur für Hintergrundmusik usw. nötig.
-
Hmm, sry, ich versteh überhaupt nicht was du meinst

Aber ich bin schon mal erleichtert das Multithreading mir bei meinem Problem nicht weiterhelfen kann ^^
Noch eine Erklärung zu meinem Problem:
Ein "V" ( der Gegner) soll sich in bestimmtem Zeitabständen über den Bildschirm bewegen (in meinem Fall auf den Spieler hinzu). Und gleichzeitig wärend das Passiert soll man seine eigene Figut (z.b. ein A) in alle richtungen bewegen können. Vieleicht ist das noch mal verständlicher ^^
mfg Frusciante ²
-
ja, ich versuch mal zu erklären, was dein vorredner meinte:
DWORD letzteZeit = 0; DWORD differenz = 10; while(true) // Hauptschlife { BewegeSpieler(); // Tasten abfragen usw. if(timeGetTime() - lezteZeit >= differenz) { // Gegener bewegen letzteZeit = timeGetTime(); BewegeGegner(); // so bewegst du den Gegner zB nur alle 10ms // anstatt timeGetTime kannste natürlich auch was anderes nehmen. } ZeichneAlles(); }Du durchläufst die Hauptschleife quasi so schnell wie möglich, dass alle Tastendrücke abgefangen werden, aber nur alle paar durchläufe bewegst du den gegner.
-
Ah ich glaub ich habs verstanden. Ich erklär es mal so wie ich es verstanden hab (also mit den worten eines Anfängers ^^). Ich durchlaufe zum beispiel 10 mal die Schleife mit der Tastenabfrage des Spieler und zähle einen zu der Variable time hinzu. Wenn die Variable 10 ereicht hat wir der Gegner einmal bewegt? Klingt schon besser als mein versuch, aber hängt das Spiel dann nicht trotzdem kurz?
mfg Frusciante²
-
Hmmm, wenn ich es so mache wie ich es gerade beschrieben habe bekomm ich keine ms hin

Ich versteh auch noch nicht warum du in deinem Beispiel Funktionen benutzt hast?!EDIT: Habs hinbekommen, hab vergessen die Variable jedesmal wieder zu nullen ^^
mfg Frusciante²