Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
14.10.2006, 23:48
Protector



Hallo meine Lieben.
Ich habe mit Hilfe von game_countern eine Art gemappte Variable erschaffen, die bis 10 zählen soll. Die game_counter heißen alle gleich und werden bei der Addition von einem trigger_relay auf "on" und bei der Subtraktion auf "off" getriggert. Die counter triggern ihrerseits für verschiedene Werte func_wall_toggles, die mir den aktuellen Wert anzeigen sollen.

Quellcode:counter: c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c9 | c10 | c11 | c12

wert___: -1 | 0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  |  8  |  9  |  10
Der erste Counter reagiert bei -1 und aktiviert einen counter_set, der alle auf 9 stellt. Der letzte Counter tut dasselbe und setzt den Wert bei 10 auf 0. Alle anderen aktivieren jeweils das func_wall_toggle, das die entsprechende Ziffer trägt.
Wenn ich nun im Spiel die Addition auslöse, funktioniert alles perfekt. Auch multi_manager, die Additionen von 2, 3, 4 und 5 auslösen, machen keine Probleme. Allerdings hapert es bei der Subtraktion. Obwohl alle Einstellungen richtig zu sein scheinen, bleiben bei der 0 alle func_wall_toggle unsichtbar. Bei der nächsten Subtraktion wird die 9 aktiviert, wie es sein sollte, danach aber sofort die 7. Die 8 wird gnadenlos übersprungen. Löse ich an einer der kuriosen stellen die Addition aus, funktioniert alles perfekt. Von der 8 zur 9, von der 9 zur 0 usw. Nur umgekehrt läuft irgendetwas schief und ich komme damit auf keinen grünen Zweig.

Vielleicht gibt es ja etwas was ich über game_counter noch nicht weiß, oder ich habe irgendwo einen dummen Fehler gemacht, den ich einfach immer wieder übersehe. Wie auch immer, ich bin für jeden Rat und jeden Tipp den ihr mir geben könnt dankbar.

Hier gibt es die Map als rmf und map zum Download.

--

zum Seitenanfang zum Seitenende Profil || Suche
001
03.11.2006, 16:22
Protector



So, auch wenn das wohl ein sehr rares Problem ist, möchte ich euch die Lösung bzw. die Ursache nicht vorenthalten. Das Problem könnte auch bei anderen Entities auftreten, sobald abhängige Abläufe unabhängig angesteuert werden.

Das Problem trat auf, weil ich 12 verschiedene game_counter hatte, die zu je einer bestimmten Zahl etwas auslösen sollten, das abhängig war von den anderen game_countern (alle mussten immer denselben Wert haben, damit sich nichts überschneidet.) Wenn nun -1 oder 10 erreicht wurde, haben die jeweiligen game_counter zwei neue Entities aktiviert. Eines, das den Zehnerwert entsprechend ändert und eines, das den Wert aller game_counter auf 9 oder 0 setzt. Und hier kommen wir zu dem Problem: Die game_counter_sets, die die Werte neu setzen, wurden zu früh ausgelöst. Folgendes spielte sich hinter den Kulissen ab:
Quellcode:1. Button löst das trigger_relay aus
2. trigger_relay triggert die game_counter
3. game_counter#1: x -1
4. game_counter#2: x -1
5. game_counter#3: x -1
usw.
Wenn die game_counter auf 0 standen, wird -1 erreicht, woraufhin der game_counter#1 sein Werk tut:
Quellcode:1. Button löst das trigger_relay aus
2. trigger_relay triggert die game_counter
3. game_counter#1: 0 -1 = -1
4. game_counter#1 triggert game_counter_set
5. game_counter_set setzt alle game_counter auf 9
6. game_counter#2: 9 -1 = 8
7. game_counter#3: 9 -1 = 8
usw.
Wie man sehen kann, werden die nachfolgenden game_counter auf 9 gesetzt, bevor sie auf -1 standen. Danach erst arbeitet das trigger_relay weiter und triggert alle weiteren game_counter. So kommt es, dass bei 0 keine Zahl erscheint, da der game_counter, der bei 0 auslöst nun auf 8 steht. Dadurch verschieben sich die Werte, bis man wieder zur -1 kommt, da dieser game_counter noch korrekt zählt. Der Sprung im Zehnerbereich, bzw. die Nachricht dass man unter 0 gekommen ist, erscheint im richtigen Moment, aber alle anderen game_counter laufen fehlerhaft.
Beim Addieren ist das deshalb nicht passiert, weil der entsprechende game_counter als letzter ausgelöst wurde, allerdings würde hier derselbe Effekt auftreten, wenn man den game_counter für den Wert 10 am Anfang erstellt hätte.

Das Problem habe ich daher so gelöst, dass ich erst ein trigger_relay auslöse, das danach mit einem delay von 0.1 Sekunden den game_counter_set triggert. So wird zwar das trigger_relay aktiviert, bevor die Werte der restlichen game_counter subtrahiert werden, allerdings löst es den game_counter_set erst danach aus.

Dieser Effekt kann also jederzeit eintreten, wenn man abhängige Entitysysteme versucht unabhängig anzusteuern und ist nicht auf game_counter beschränkt.

--


Dieser Beitrag wurde am 03.11.2006 um 16:24 von Protector bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
03.11.2006, 17:03
Richman
Moderator


Interessantes Problem. Interessante Lösung. Interessante Analyse. ;)

Aber was genau, meinst du mit einem "Abhängigen Entity-System"? Was ist von was abhängig und in wie fern?

--

Richman's Hazardous Course - Status: 100% !!!
www.richmans-maps.ch.vu - wieder online!

zum Seitenanfang zum Seitenende Profil || Suche
003
03.11.2006, 17:18
Protector



Ich meine damit, dass ich im Prinzip 12 unabhängige Systeme (die game_counter) habe, die zusammen ein abhängiges System (das Zehnerzählsystem) bilden. Wenn ich jetzt aus einem der unabhängigen Teile heraus das Gesamtsystem ansteuere, bedeutet das, dass ich die Abhängigkeit störe, weil ein System so agiert, als käme es von außen, obwohl es Teil des Ganzen ist. Vermutlich drücke ich mich extrem bescheuert aus, liegt aber einfach daran, dass mir das Ganze visuell und logisch klar ist, ich aber Probleme habe das zu verbalisieren.

--

zum Seitenanfang zum Seitenende Profil || Suche