.| Autor | Beitrag |
|---|---|
|
000 22.10.2005, 00:13 iconoclast |
Ich arbeite gerade an nem kleinem Versuchsprojekt, im Prinzip ein interaktives Raetselgame. Nun wuerde ich gerne am Ende des jeweiligen Levels eine Zeit anzeigen lassen, wie lange der Spieler vom Start bis zum Ende gebraucht hat. Man koennte das vielleicht mit Brushes/ Triggern machen, aber ich weiss nicht wie. Danke fuer die Hilfe. -- |
|
Profil || Suche |
|
001 22.10.2005, 00:38 Megge |
math_*, ab start triggert jeweils alle sekunde ein z.B. trigger_multiple das math entity. somit hast du am ende die summe der gebrauchten sekunden. Im Prinzip so einfach wie Treppen bauen (-> Wie baust du eine Treppe mit Lego? - Du steckst einen Klotz auf den anderen; Wie stoppt man die Zeit mit Kieselsteinen? - Man legt alle Sekunde eines auf den Boden). Vereinfache, wenn es kompliziert aussieht. -- |
|
Profil || Suche |
|
002 22.10.2005, 12:12 Richman Moderator |
Das Problem ist nur, dass du jetzt die gestoppte Zeit, wunderbar als Variable in diesem math_counter hast. Nur wie kriegt man die auf den Bildschirm? Darüber rätsle ich leider auch schon lange. :( --Richman's Hazardous Course - Status: 100% !!! |
|
Profil || Suche |
|
003 22.10.2005, 13:23 Agamemnon-Hellmapper |
Vielleicht wird es doch einfacher, wenn man es kompliziert macht. Ich meine: Wenn du das ganze mehr wie ein Uhrwerk machst und einen Counter nur bis 10 zählen lässt, den nächsten nur bis 6 und den dritten dann wieder bis 10 etc.pp und beim erreichen der Grenze setzt sich der Counter wieder auf 0 und lässt den nächsten Counter eines weiterspringen. Auf diese Weise hast Sekundeneiner, -zehner, Minuteneiner, -zehner etc. in getrennten Variablen und du kannst die Anzeige wesentlich vereinfachen, wenn du nur zwischen maximal 10 Werten, die eine einzelne Countervariable haben kann, unterscheiden musst. --Es gibt 2 Möglichkeiten, eine Kristallkugel zu benutzen: |
|
Profil || Suche |
|
004 22.10.2005, 14:44 Night Wolf |
Ich würde das Problem mit einer Echtzeituhr lösen. Ein Tut wie man diese baut gabs auch schon auf der Seite. Sieht zwar nich so schick aus wie eine Stoppuhranzeige, aber das is ja letztendlich egal. So weit ich mich erinnere bestand die Uhr einfach nur aus zwei rotatings, welche sich wie echte Zeiger bewegen. Mas müsste dann nur noch einen Sekundenzeiger dazu bauen. Beim beginn der ersten Aufgabe wird der Drehmechanismus der rotatings begonnen, beim erfüllen der letzten Aufgabe gestoppt. Im letzten Raum dann kommt man zu dem Platz wo die Uhr steht. Kann man ja noch etwas mit Brushes drumherum verschönern. Müsste eigentlich den Zweck erfüllen können. --Muh sag ich da! |
|
Profil || Suche |
|
005 22.10.2005, 14:52 HammerBlade |
Das Problem bei dieser Uhr mit func_rotatings war zumindest bei HL1, dass sie nicht genau geht. Ich bastel gerade ne 7-Segment-Version. Edit: So, bin vorerst fertig. Hier eine >SampleMap<. Ich musste leider feststellen, dass es wohl in HL2 kein trigger_changetarget, oder etwas mit dessen Funktionalität gibt, daher habe ich eine grosse Zahl Entities gebraucht: 1x math_counter + 1x logic_compare + 10x logic_relay pro 7-Segment-Anzeige (von denen es 4 gibt) und jeweils nur einmal 1x logic_timers + 1x logic_auto. Mit "ChangeTraget" hätte man nur einmal 10x logic_relay für die BCD-Codierung gebraucht und nicht für jedes Segment. Die Segmente selbst bestehen jeweils aus 7x func_movelinear. Ein weiters Problem ist die Genauigkeit des logic_timers. Eine Sekunde wird noch zufriedentstellen aufgelösst, aber bei einer 1/10 Sekunde wird der Fehler schon so gross, dass sich die Abweichung pro Minute schon zu ~5 Sekunden akkumuliert, so dass ich die 1/10, 1/100 und 1/1000 Sekunden Anzeige offen gelassen habe. Dies könnte man dadurch lösen, dass man hier jeweils eine eigene logic_timer verwendet, so dass sich der Fehler nicht auf die Sekunden-Anzeige auswirkt. --"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Dieser Beitrag wurde am 22.10.2005 um 17:34 von HammerBlade bearbeitet. |
|
Profil || Suche |
|
006 22.10.2005, 21:38 HammerBlade |
(Das Editier-Zeitfenster hat nicht gereicht) Ich habe jetzt noch etwas weiter experimentiert und ein Lösung mit weniger Entities gefunden. Hierbei ist nicht jedes einzelne Segment ein func_movelinear sondern es gibt vorgefertigte Segmentkombinationen für die Zahlen, wodurch 9 der 10 logic_relay pro 7-Segment-Anzeige entfallen (eins wir noch für's resetten gebraucht). Der nachteil dieser Lösung ist, dass die Anzeige flackert durch den schnellen Wechsel aller Segmente. Die 1/10 und 1/100 Sekunden funktionieren jetzt auch und sind durch jeweils einen eigenen logic_timer realisiert, damit sich der Fehler nicht zu den Sekunden hin akkumuliert. SampleMaps: "Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon |
|
Profil || Suche |
|
007 24.10.2005, 00:22 Night Wolf |
Das is mal wirklich eine tolle Sache würd ich sagen ^^ Wäre mir ein festes Tut wert, der Thread ----- Muh sag ich da! |
|
Profil || Suche |
|
008 24.10.2005, 01:15 HammerBlade |
Da der Aufbau dieser Uhr ist leider viel komplexer und arbeitsintensiver (man sieht es an meinen Postzeiten, ~6h) als die Analoguhr, zu der es schon ein Tutorial gibt. So wird wohl auch ein Tutorial zu dieser Digitaluhr nicht so einfach zu schreiben sein, wenn man (ich) den Aufbau vernünftig erklären will. Ich bin noch nicht sicher, ob ich unter der Woche dazu komme, wenn nicht werd ich's wohl am nächsten Wochenende in ein Tutorial umsetzen. --"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Dieser Beitrag wurde am 24.10.2005 um 01:16 von HammerBlade bearbeitet. |
|
Profil || Suche |


