Tempolimit in Städten umgehen - Druckversion +- Deutsches Simutransforum (https://simutrans-forum.de/mybb) +-- Forum: Simutrans (https://simutrans-forum.de/mybb/forumdisplay.php?fid=3) +--- Forum: Archiv (Abgeschlossene Arbeiten) (https://simutrans-forum.de/mybb/forumdisplay.php?fid=15) +--- Thema: Tempolimit in Städten umgehen (/showthread.php?tid=209) |
Tempolimit in Städten umgehen - Marnem - 12-10-2004 Simutrans-Version: 0.84.16.2 PAK-Set (+zusätzliche PAK-Dateien): PAK128 Betriebssystem: Win XP Fehler (möglichst genaue Beschreibung): Für die Straßen in den Städten gibts ja ein Tempolimit von 50 km/h. Wenn ich nun über diese Straßen mit meiner "Asphalt, Tempo 100" drüberplaniere, wird damit das Tempolimit aufgehoben, d.h. meine Busse rasen mit Vollgas durch die Gassen. Verhalten (Absturz, Einfrieren, ...): Ist es ein Bug? ist es ein Feature? Ihr werdet es wissen. - Hajo - 12-10-2004 Ich bin für Feature. Im englischen Forum wurde vorgeschlagen den Spieler auch Stadtstrassen abauen zu lassen. Dann könnte man das Tempolimit beibehalten. - mip - 13-10-2004 Wäre es sehr schwierig, beim Bau einer Strasse zu überprüfen, ob sie im Stadtradius ist und dann falls sie eine Höchstgeschwindigkeit > 50kmh hat, diese zu überschreiben? Gruss Stefan - Hajo - 13-10-2004 Schwierig nicht, aber langsam. - mip - 13-10-2004 Dann muss es anders gehen. - Marnem - 13-10-2004 Anderer Vorschlag: Jedes Tile bekommt ein Flag, ob es in einer Stadt liegt, oder nicht. Wenn das Flag gesetzt ist, ist vmax immer 50 km/h. Das setzten des Flags stelle ich mir so vor: Beim bau eines Hauses an einem Straßentile läuft folgendes ab: void checkNSetInCity() { if ( Straßentile && (!(inCity))) { nachbartileO = tileverwaltung.getTile(x+1, y); nachbartileN = tileverwaltung.getTile(x, y+1); nachbartileS = tileverwaltung.getTile(x-1, y); nachbartileW = tileverwaltung.getTile(x, y-1); if ( nachbarteilO->isInCity || nachbarteilN->isInCity || nachbarteilS->isInCity || nachbarteilW.isinCity ) { inCity = true; vmax = 50; nachbartileO->checkNSetInCity(); nachbartileN->checkNSetInCity(); nachbartileS->checkNSetInCity(); nachbartileW->checkNSetInCity(); } } } void checkNSetInCityMapGen() { nachbartileO = tileverwaltung.getTile(x+1, y); nachbartileN = tileverwaltung.getTile(x, y+1); nachbartileS = tileverwaltung.getTile(x-1, y); nachbartileW = tileverwaltung.getTile(x, y-1); if ( nachbarteilO->isInCity || nachbarteilN->isInCity || nachbarteilS->isInCity || nachbarteilW.isinCity ) { inCity = true; vmax = 50; nachbartileO->checkNSetInCity(); nachbartileN->checkNSetInCity(); nachbartileS->checkNSetInCity(); nachbartileW->checkNSetInCity(); } } Und beim Straßenbau wird aufs inCity geprüft und entsprechend gehandelt. Beim Karte generieren wird 1 (!) an das Rathausangrenzendes (oder das nächst liegende) Straßentile inCity gesetzt und die checkNSetInCityMapGen() auf das Tile aufgerufen. Ich hab jetzt momentan noch ned die Geistige frische, ob mit der Methode sichergestellt is, daß auch wirklich alle Innenstadttiles beim generieren überprüft werden, denke aber schon, daß dem so ist. Sollte auch ned so furchtbar lange dauern, vorrausgesetzt, ihr habt das Spiel so aufgebaut, wies ich mir denke Kritik und "hau-auf-den-Neuling-mit-seinen-dummen-Ideen" erwünscht. - Marnem - 13-10-2004 Hmm, ne hübsche Endlosschleife hab ich da gepostet :baby: . So ein Schrott. Peinlich. Aber vielleicht kanns ja als Inspirationshilfe gebraucht werden - markus - 13-10-2004 Zitat:Original von mipBitte nicht. Ich verwende das Feature um Schnellstraßen durch Städte zu bauen. - Hajo - 13-10-2004 Zitat:Original von Marnem Ich würde eine Referenz zur Stadt ablegen. Ich glaube wir brauchen das früher oder später sowieso weil die Spieler sich viele Features wünschen die auf die Stad einfluss haben sollen, aber zur Zeit nicht möglich sind, weil von einem Feld keinen Verweis auf die nächste Stadt gibt. Auf der anderen Seite stört mich der Speicherverbrauch nur um so etwas triviales zu hinterlegen ... die Tiles haben gerade ein vielfaches von 4 bytes größe. Wenn ich auch nur ein byte dazu nehme, rundert der compiler auf die nächsten 4 auf. D.h. 4 bytes auf einer 256x256er Karte = 256KB Speicher. Das ist nicht viel, aber der CPU Cache wird immer ineffizienter je größer die Objekte von Simutrans werden, und schon jetzt braucht Simutrans sehr viel Speicher, tortz all unserer Bemühungen Speicher zu sparen. |