Autor |
Nachricht |
< Objekte unsichtbar machen |
|
Verfasst am:
Do, 9 Sep 2004 - 0:18
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
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“? |
|
|
|
|
|
Verfasst am:
Do, 9 Sep 2004 - 10:34
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
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:
Code: |
#DAT 'normal.adv'
Aktion Anfang
Ausf
Text 'Irgendwo hier muss der Dreizack versteckt ein.
[#][#][f]Z U M G R E I F E N N A H[n]
[x]Ein interaktives Objekteraten[#]'
geheZu Versteck
EndeAusf
Raum Strand
Name 'Strand'
S Versteck
Besch 'Dieser weiße Sandstrand erstreckt sich von Westen nach
Osten. Im Süden erhebt sich eine steile Felswand mit einer
schmalen Öffnung.'
Raum Versteck
Name 'Versteck'
N Strand
Besch 'Dies ist das geheime Versteck von Ragnar dem
Rotbärtigen, eine klamme und nur leidlich beleuchtete
Höhle. Der einzige Ausgang ist im Norden, zurück zum
Strand.'
Obj Zechine
Name 'Zechnine' f
Adj 'golden'
Vor 'gold'
Subst 'zechine' f, 'münze' f
Besch 'Eine goldene Zechine aus Venedig, verziert mit dem
Konterfei eines der Borgia.'
Ort Versteck
Obj Sextant
Name 'golden^ Sextant' m
Adj 'golden' 'nautisch'
Vor 'gold'
Subst 'sextant' m, 'instrument' n
Besch 'Ein nautisches Instrument, Präzisionsarbeit aus
Nantes und purem Gold.'
Ort Versteck
Obj Brosche
Name 'Brosche' f
Adj 'golden'
Vor 'gold' 'salamander'
Subst 'brosche' f, 'salamander' m
Besch 'Es ist eine goldene Brosche in der Form eines
Salamanders.'
Ort Versteck
Raum Limbo
Name 'Zwischen dieser und jener Welt'
Besch 'An einer der immateriellen Wände steht: "Wer das
liest, ist tot."'
Obj Dreizack
Name 'Dreizack' m
Adj 'golden'
Vor 'gold'
Subst 'dreizack' m, 'gabel' f
Besch 'Ein Dreizack von etwa fünf Ellen Länge, wie er
früher in der Ägäis benutzt wurde - nur, dass dieser
aus purem Gold ist.'
Ort Limbo
Aktion SichtUndRw
Ausf
wenn (aRaum = Versteck) und (iObj = Dreizack) und
(iObj in Limbo) und /(aBef = Lage) dann
ObjInRw iObj
ObjInSicht iObj
Ende
EndeAusf
|
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...) _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Do, 9 Sep 2004 - 16:41
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
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 wird’s viel übersichtlicher, danke nochmals. |
|
|
|
|
|
Verfasst am:
Mo, 13 Sep 2004 - 13:19
|
|
|
|
ChristianB hat folgendes geschrieben: | [...] nur leider scheint die Antwort zu dem Beitrag gelöscht worden zu sein |
Sie lautete meiner Erinnerung nach
Walafrid hat folgendes geschrieben: | |
|
|
|
|
|
|
|
Alle Zeiten sind GMT + 1 Stunde (MEZ) |
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|