Problem mit einer Switch Case
lima-city → Forum → Programmiersprachen → C/C++ und D
bestimmt code
break
code
dummer fehler
fehler
funktioniert break
funktioniert switch
info
logik
problem
referenz
special
spur
switch
type
update
url
wartezeit
welle
zuweisung
-
Hallo,
Ich habe eine (eigentlich) recht einfache Switch Case, die nichts anderes machen soll, als ein Event nach 9000ms aufzurufen... Allerdings passiert dies nicht, sondern das Event wird direkt aufgerufen, ohne jegliche Spur der "Wartezeit"...
uiWaveCount == Die Wellen, die gespawnt werden sollen (fängt bei eins an)
events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); == Hier soll das Event nach 9000ms Aufgerufen werden
switch (events.ExecuteEvent()) == Hier wird das Event ausgeführt
Das Event wird gestartet etwas weiter oben durch eine IF
if (type == DATA_WAVE_COUNT && data == SPECIAL) { uiWaveCount == 0; bIntroDone = true; CloseDoor(uiFrontDoor); CloseDoor(uiRunDoor); if(uiWaveCount == 0){ events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); } return; }
Damit habe ich keine Probleme, das funktioniert so, bis auf das der Timer eben nicht geht...
Hier werden die Wellen aufgezählt und die nächste Zeit der Welle bestimmt:
void AddWave() { if(uiWaveCount <= 10){ DoUpdateWorldState(WORLD_STATE_HOR, 1); //Counter Anzeige (unwichtig) weil funktioniert DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, uiWaveCount); //Counter (unwichtig) weil funktioniert } switch (uiWaveCount) { case 1: if (Creature* falric = instance->GetCreature(uiFalric)){ //unwichtig, weil funktioniert SpawnWave(falric); events.ScheduleEvent(EVENT_NEXT_WAVE, 9000);//Nächste Welle in 1:30 Min return; } break; case 2: if (Creature* falric = instance->GetCreature(uiFalric)){ SpawnWave(falric); events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); return; } break; case 3: if (Creature* falric = instance->GetCreature(uiFalric)){ SpawnWave(falric); events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); return; } break; case 4: if (Creature* falric = instance->GetCreature(uiFalric)){ SpawnWave(falric); events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); return; } break; case 5: if (GetData(DATA_FALRIC_EVENT) == DONE) //unwichtig, weil funktioniert events.ScheduleEvent(EVENT_NEXT_WAVE, 10000); //funktioniert nicht else if (Creature* falric = instance->GetCreature(uiFalric))//unwichtig, weil funktioniert if (falric->AI()) //unwichtig, weil funktioniert falric->AI()->DoAction(ACTION_ENTER_COMBAT); //unwichtig, weil funktioniert break; case 6: if (Creature* marwyn = instance->GetCreature(uiMarwyn)){ //unwichtig, weil funktioniert SpawnWave(marwyn); events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); return; } break; case 7: if (Creature* marwyn = instance->GetCreature(uiMarwyn)){ SpawnWave(marwyn); events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); return; } break; case 8: if (Creature* marwyn = instance->GetCreature(uiMarwyn)){ SpawnWave(marwyn); events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); return; } break; case 9: if (Creature* marwyn = instance->GetCreature(uiMarwyn)){ SpawnWave(marwyn); events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); return; } break; case 10: if (GetData(DATA_MARWYN_EVENT) != DONE) //unwichtig, weil funktioniert if (Creature* marwyn = instance->GetCreature(uiMarwyn)) //unwichtig, weil funktioniert if (marwyn->AI()) //unwichtig, weil funktioniert marwyn->AI()->DoAction(ACTION_ENTER_COMBAT); //unwichtig, weil funktioniert break; } }
Die Wellen erscheinen und alles funktioniert wunderbar, nur die Zeit nicht
Hier wird das Event ausgeführt:
void Update(uint32 diff) { if (!instance->HavePlayers()) return; events.Update(diff); switch (events.ExecuteEvent()) { case EVENT_NEXT_WAVE: uiWaveCount++; //Welle hoch Zählen für Counter und Switch Case AddWave(); //Switch Case und Counter- Update ausführen break; } }
ScheduleEvent Referenz
Es geht also NUR darum die Wellen (uiWavesCount) zeitgemäß auszuführen und nicht immer sofort... Ist es vielleicht ein Logik Fehler oder so? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
if (type == DATA_WAVE_COUNT && data == SPECIAL) { /* uiWaveCount == 0; */ /* vorher */ uiWaveCount = 0; /* nachher */ bIntroDone = true; CloseDoor(uiFrontDoor); CloseDoor(uiRunDoor); if (uiWaveCount == 0) { events.ScheduleEvent(EVENT_NEXT_WAVE, 9000); } return; }
Vielleicht funktioniert es, wenn man den Vergleich (==) durch eine Zuweisung (=) ersetzt?
Beitrag zuletzt geändert: 15.5.2013 22:08:58 von perlbotics -
Okay, dummer Fehler.. Einen Unterschied hat's nun allerdings nicht gemacht :s
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage