Geschrieben um 01:18 am 09.09.2004 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 1062 | Ich weiß, die Frage hat Tanan schon mal so ähnlich hier im Forum gestellt, nur leider scheint die Antwort zu dem Beitrag gelöscht worden zu sein, also frag ich noch einmal: Momentan ist mir nur die Möglichkeit über das Attribut fest zum Unsichtbarmachen von Objekten bekannt. Um solche Objekte dennoch zu nehmen (oder auf andere entsprechende Weise zu manipulieren), schalte ich vor der Ausführung das Attribut fest aus und evtl. nach der Ausführung wieder ein; das kann in manchen Fällen recht umständlich sein. Gibt es noch eine andere Möglichkeit, Objekte unsichtbar zu machen, z.B. über ein Objekt-Attribut unsichtbar? |
Geschrieben um 11:34 am 09.09.2004 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Es stimmt, lediglich Objekte mit dem Attribut fest und Dekos werden in Raumbeschreibungen nicht angezeigt. Dekos sind spezielle Objekte, die ihren Ort und ihren Zustand wähend des Spiels nicht ändern können und immer Dekos bleiben. Die einzige Möglichkeit, über Attribute die Sichtbarkeit zu ändern, ist also wie von dir beschrieben mit fest, das dem Objekt gegeben oder weggenommen wird. Der Hintergrund ist folgender: Alle Objekte, die der Spieler mitnehmen und woanders wieder ablegen kann, werden im dynamischen Teil der Raumbeschreibung, der Liste der Objekte erwähnt. Das ist so, damit der Spieler immer über den Zustand des Raums inklusive seines Inhalts Bescheid weiß. Das Attribut fest ist für nicht bewegliche Objekte gedacht, die in der (statischen) Raumbeschreibung explizit erwähnt werden. Soll ein solcher Gegenstand in der Liste der beweglichen Objekte auftauchen, womöglich mit einer Erst-Beschreibung (die ja immer angezeigt würde, da das Objekt nicht mitgenommen werden kann und so auch nie vom Programm das Attribut bewegt bekommt), so muss es das Attribut immobil bekommen. (Diese Objekte können natürlich den Raum wechseln, wenn es der Autor so programmiert. Nur der Spieler kann sie nicht mit sich herumtragen.) Ein Verbergen von Objekten ist natürlich erst einmal eine Irreführung des Spielers, und als solche nicht erwünscht. Es sei denn, sie ist Bestandteil eines Rätsels, und dann ist sie wohl eine Ausnahme, zu der man ruhig etwas mehr Programmieraufwand in Kauf nehmen kann, finde ich. Wenn es in deinem Spiel, aus welchen Gründen auch immer, viele solcher Objekte gibt, ist die wohl eleganteste Lösung eine ObjKlasse, die das Attribut fest so setzt und löscht, wie du es möchtest. Eine weitere Möglichkeit, ein Objekt unsichtbar zu machen, ist, die Aktion SichtUndRw zu verwenden. Im nachfolgenden Beispiel kann man den Dreizack immer betrachten und anfassen, er wird aber nicht in der Raumbeschreibung erwähnt:
Alternativ könnte man in SichtUndRw auch die Sichtbarkeit des Dreizacks beim Befehl "Lage" mit ObjAußerSicht unterdrücken und würde einen Raum sparen. Dann würde der Dreizack (wenn es nicht anders abgefangen würde) im Versteck immer unsichtbar sein, auch wenn er aufgehoben und wieder abgelegt wird. (Das ist mir zu spät eingefallen, ich hatte den Code schon geschrieben...) |
Geschrieben um 17:41 am 09.09.2004 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 1062 | Herzlichen Dank für die ausführliche Antwort und das schöne Beispiel. Dein Vorschlag mit der Aktion SichtUndRw ist bei weitem eleganter, als das, was ich mir da zurechtgebastelt hatte. Es sollen an bestimmten Stellen im Spiel alle anwesenden (beweglichen) Gegenstände unsichtbar werden - so wirds viel übersichtlicher, danke nochmals. |
Geschrieben um 14:19 am 13.09.2004 | Zitat | Editieren | Löschen | |
Gast | ChristianB:
Sie lautete meiner Erinnerung nach Walafrid:
|