Forum moved to if-forum.org
Autor Nachricht
<  ScopeWithin(ALLE) ??
Kris
BeitragVerfasst am: Mo, 24 Jan 2005 - 12:05  Antworten mit Zitat
Kompassleser
Kompassleser


Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain

Ich habe eine Frage zu ScopeWithin:

Bei:

Code:
[ AskTopicsScope;
switch (scope_stage) {
1: rfalse;
2: ScopeWithin(AskTopics); rtrue;

...


Müssen ja alle Topics als Kinder von AskTopics angelegt werden.
Gibt es eine Möglichkeit, ALLE Objekte mit einzubeziehen?
So müsste ein sowieso schon bestehenedes Objekt nicht nocheinmal angelegt werden sondern nur die, die noch nicht als Objekte existieren.

Es muß doch soetwas wie eine "Mutter" aller Objekte geben (gibt es nicht, klar, weil es auch Waisen gibt).
Aber was ich meine, sollen ähnlich wie bei "ObjectLoop (o)" eben alle Objekte berücksichtigt werden.

Der Versuch mit "ScopeWithin()" schlug leider fehl.


Dank und Gruß


Kris
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 24 Jan 2005 - 12:21  Antworten mit Zitat
Experte
Experte


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

Wieso machst du es nicht so, wie es in Aufgabe 99 beschrieben wird? Du bist ja nicht unbedingt an ScopeWithin gebunden, du kannst ja auch PlaceInScope verwenden:

Code:

[ AskTopicsScope i;
  if (scope_stage == 1) rfalse;
  if (scope_stage == 2) {
      objectloop (i ofclass Object) PlaceInScope(i);
      rtrue;
  }
  "Du fragst Sachen!";
];


Probier das mal. Wenn das klappt, könntest du die Objekte, die man erfgaren kann, einschränken, indem du mögliche Objekte mit einem neu zu definierenden Attribut kennzeichnest:

Code:

  objectloop (i ofclass Object && i has validtopic)
      PlaceInScope(i);

Das ist vielleicht zuviel des Guten, aber ein großer Scope bedeutet auch viel Arbeit für den Parser, so dass diese Option vielleicht nützlich ist, wenn das Spiel durch den alles umfassenden Scope arg langsam wird.

Vielleicht wird die Analyse aber auch bereits durch den globalen objectloop langsam, dann könntest du vielleicht ein Feld mit gültigen Topics schreiben, die dann dem Scope hinzugefügt werden:

Code:

Array validtopics table Napoleon Descartes Jacques_Chirac;

[ AskTopicsScope i;
  if (scope_stage == 1) rfalse;
  if (scope_stage == 2) {
      for (i=1 : i<=validtopics-->0 : i++)
          PlaceInScope(validtopics-->i);
      rtrue;
  }
  "Du fragst Sachen!";
];


Auf diese Weise behalten die Objekte ihren Platz im Baum, können aber trotzdem einigermaßen zügig in den Scope gebracht werden.

Kris hat folgendes geschrieben:
Der Versuch mit "ScopeWithin()" schlug leider fehl.

Das ist klar. Du versuchst hier, die Kinder von nichts zu finden und das ist laut z-Maschinen-Spezifikation etwas ganz, ganz Böses...
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kris
BeitragVerfasst am: Mo, 24 Jan 2005 - 15:05  Antworten mit Zitat
Kompassleser
Kompassleser


Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain

Martin hat folgendes geschrieben:
Wieso machst du es nicht so, wie es in Aufgabe 99 beschrieben wird?


Weil ich dummerweise die Aufgaben manchmal überlese obwohl ich dort immer wieder Antworten auf meine Fragen bekommen habe ;-)

Jedenfalls habe ich das eben mal ausprobiert und es funktioniert.


Martin hat folgendes geschrieben:
Das ist vielleicht zuviel des Guten, aber ein großer Scope bedeutet auch viel Arbeit für den Parser, so dass diese Option vielleicht nützlich ist, wenn das Spiel durch den alles umfassenden Scope arg langsam wird.


Also langsam ist es nicht, ich bin bei ca. 250 Objekten, aber auch noch nicht fertig. Kann aber auch nicht testen, wie lange es auf einem langsameren System dauert, da PentiumII das langsamste ist, was ich zu Hause habe und ich nicht glaube, hier schon einen Unterschied zu bemerken.


Ich werde es jetzt jedenfalls erstmal so belassen.

Vielen Dank!


Kris
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 24 Jan 2005 - 16:12  Antworten mit Zitat
Experte
Experte


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

Kris hat folgendes geschrieben:
Weil ich dummerweise die Aufgaben manchmal überlese obwohl ich dort immer wieder Antworten auf meine Fragen bekommen habe ;-)

Die Aufgaben gehören im DM4 auf jeden Fall mit zur Lektüre. Manche Dinge, wenn auch nur selten benutzte, werden nur in Aufgaben angesprochen, wie zum Beispiel in den Aufgaben 65 (lookmode) und 91 (NounDomain). Außerdem sind die Aufgaben sehr gute Beispiele für elegantes Coden in Inform.

PlaceInScope(obj) wird aber auf Seite 234 ohne Zusammenhang zu Aufgaben beschrieben :->

Kris hat folgendes geschrieben:
Jedenfalls habe ich das eben mal ausprobiert und es funktioniert.

Fein. (Hatte es nämlich nicht getestet.)
_________________
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