Donnerstag, 8. Januar 2009

Netzwerk - gepuffert und eventgesteuert

Netzwerknachrichten (außer Ping) werden jetzt nicht mehr sofort behandelt, sondern in einer queue gepuffert und danach jedes mal im Run der Engine behandelt. Mit Hilfe folgender Methode des InputManagers wird die Queue im Run geleert:

bool sktx::CInptManager::postQueuedNetPackets()
{
keptnetpckts.begin();
int i = 0;
for (i = 0; i <>(GMINST->getCurr()) == MAININST)
sendNetPacket(keptnetpckts.pop_unsafe());
keptnetpckts.end();
return i > 0;
}

Zusätzlich wurden einige andere Threads "gespart": Thread für Joystick, Xinput (Gamepad)
Problem dann, wenn sehr geringe Anzahl FPS: aufgrund der Geschwindigkeit des Rechners kann (und wird) es natürlich vorkommen, dass ein gedrückter Knopf nicht erkannt wird, weil zu dem Zeitpunkt, zu dem abgefragt wird, der Knopf bereits wieder losgelassen wurde!

2 Kommentare:

  1. Eventuell könnte man beim Input doch einen Thread machen, der die Inputs in eine Queue stellt. Aus dieser Queue nimmt Run dann die Eingabe.
    Möglicherweise müsste man immer alle Events nehmen (also die Queue leeren), damit nichts verloren geht.

    AntwortenLöschen
  2. Dieses Verhalten lässt sich durch ein #define einschalten. Auf der anderen Seite ist bei einer FPS-Zahl von unter 10 das Spiel sowieso nicht spielbar.

    AntwortenLöschen