Forum moved to if-forum.org
Autor Nachricht
<  Objekte unsichtbar machen
ChristianB
BeitragVerfasst am: Do, 9 Sep 2004 - 0:18  Antworten mit Zitat
Experte
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“?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Do, 9 Sep 2004 - 10:34  Antworten mit Zitat
Experte
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Do, 9 Sep 2004 - 16:41  Antworten mit Zitat
Experte
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Florian
BeitragVerfasst am: Mo, 13 Sep 2004 - 13:19  Antworten mit Zitat
Gast





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:
Code:
Erst ''
Nach oben
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  T.A.G.

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
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.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05