Forum moved to if-forum.org
Autor Nachricht
<  I6 Reihenfolge der Tocherobjekte ändern
C++
BeitragVerfasst am: Fr, 13 Mai 2011 - 22:49  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 21.12.2009
Beiträge: 45
Wohnort: Kiel

Moin zusammen!

Gibt es eine in der Lib vorgesehene Möglichkeit, die Reihenfolge der Objekte innerhalb einer Objekthierarchie (genauer: innerhalb einer Hierachiebene) zu ändern? Die Anwendung, die ich im Kopf habe, bezieht sich auf Menu- und Option-Objekte in der Erweiterung menu.h:

Code:
Menu hilfe1 "Hilfe für Ali Baba";

Option option1 -> "Wie komme ich an der Stadtwache vorbei?"
   with description [; print "Versuch doch, sie zu bestechen.^"; move suboption1 to hilfe1;];

Option option2 -> "Wie bekomme ich das Felsentor auf?"
   with description [; print "Du musst die Zauberformel kennen.^"; move suboption2 to hilfe1;];


Option suboption1 "Womit denn bestechen?"
   with description "Unter zwanzig Piaster musst du es erst gar nicht versuchen.";

Option suboption2 "Und wie lautet das Zauberwort?"
   with description "Na, wie wohl? ~Sesam öffne dich.~";
      


Das heißt, das Menü soll m.o.w. interaktiv sein und gewisse Menüoptionen erst nennen, wenn sie vorher in einer Antwort angekündigt wurden. (So kann der Spieler sich zuerst Gedanken machen, wie das Tor aufgeht, ohne dass er im Hilfe-Menü auf die Idee mit der Zauberformel gebracht wird.)
Diese Optionen sollen aber unabhängig von der Reihenfolge des Anwählens direkt unter der Frage angeordnet werden, die sie erweitern, also suboption1 unter option1 usw. (War das verständlich?)

Das Problem ist wahrscheinlich leicht mit ein, zwei Flaggen zu lösen, indem Optionen gelöscht und in der gewünschte Reihenfolge wieder ins Menü eingeordnet werden. Bevor ich das ernsthaft versuche (oder mir gar den Code von menu.h in Gänze reinziehe), wüsste ich gern, ob es eine elegantere Möglichkeit gibt, die sowieso schon lange existiert.

Schöne Grüße

Christof
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Sa, 14 Mai 2011 - 8:23  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Ich kenne menu.h nicht. Vielleicht kann man ja Objekte als bereits gelesen kennzeichnen? Dann könnte man die gesamte Baumstruktur inklusive der versteckten Optionen definieren und würde dann diese Kennzeichnung rückgängig machen anstatt neue Objekte ins Menü zu verschieben.

Alternativ könntest Du eine Routine schreiben, die das Objekt dorthin verschiebt, wo Du es haben willst. Mit der Inform-Anweisung 'move o to p' wird das Objekt immer so verschoben, dass o das älteste Kind von p ist.

Mit einem Hilfsobjekt könntest Du die Objekte aber hin und her rangieren:
Code:
Object Abstellgleis;

[ insert_after o a
    i p;
   
    p = parent(a);
    if (p == nothing) {
        print "[ *** error: tried to insert object #",
            o, " after object #", a,
            ", whose parent is nothing. ***]";
        return;
    }
   
    i = child(p);
    while (i) {
        move i to Abstellgleis;
        if (i == a) break;
        i = child(p);
    }
    move o to p;
   
    while (child(Abstellgleis)) move child(Abstellgleis) to p;
];


Wenn Du kein Hilfsobjekt anlegen willst, kannst Du die Objekte zwischen o und a auch rekursiv durchmischen:
Code:


[ ia_shuffle_up o a;
    if (o == nothing) return;   
    if (o ~= a) ia_shuffle_up(sibling(o), a);
    move o to parent(o);
];

[ insert_after o a
    p;
   
    p = parent(a);
    if (p == nothing) {
        print "[ *** error: tried to insert object #",
            o, " after object #", a,
            ", whose parent is nothing. ***]";
        return;
    }
   
    move o to p;
    ia_shuffle_up(sibling(o), a);
];

_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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  >  Inform & Glulx

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