Variable statt Namen von Objects verwenden?

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
Stalker07
Frischling
Frischling
Beiträge: 5
Registriert: 05.10.2008, 23:50

Variable statt Namen von Objects verwenden?

Beitrag von Stalker07 »

Ist es möglich, in den functions statt mit dem Namen eines Objects mit einer Variablen zu arbeiten?

Zur Erklärung:

Code: Alles auswählen

//kann ich statt
cup.Animate (2,5)  //mein Object heißt "cup"
//so was Ähnliches machen:
String variable = "cup"
variable.Animate (2,5) //?
Ok, so geht es nicht, aber vielleicht kann man AGS irgendwie anders klar machen, dass es sich bei "variable" um den Namen eines Objects handelt?
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Variable statt Namen von Objects verwenden?

Beitrag von KhrisMUC »

Klar, das Zauberwort heißt "pointer".

Code: Alles auswählen

  Object*test = cup;
  test.Animate(...);
Beispiel:

Code: Alles auswählen

function cEgo_Interact() {
  Character*c;   // c ist jetzt null, d.h. der Pointer zeigt auf keinen Charakter
  if (player.Room == 3) c = cKlofrau;
  if (player.Room == 5) c = cPassantin;
  if (player.Room == 8) c = cPenner;
  Display("Du rückst dein Ding gerade.");
  if (c == null) return; // aussteigen
  c.FaceLocation(player.x, player.y);  // jeweilige Person im Raum reagiert
  c.Say("Das hab ich gesehn!");
}
(Das geht übrigens nicht erst seit AGS objektorientiert ist; früher hat man einfach eine Integervariable auf die Nummer des Charakters gesetzt und dann DisplaySpeech(variable, "Bla"); verwendet. Aber OO ist natürlich lesbarer,)
Use gopher repellent on funny little man
Benutzeravatar
Stalker07
Frischling
Frischling
Beiträge: 5
Registriert: 05.10.2008, 23:50

Re: Variable statt Namen von Objects verwenden?

Beitrag von Stalker07 »

Okay, mit

Code: Alles auswählen

Object*test = cup;
test.Animate(...);
bin ich einen Schritt weiter gekommen. Jetzt würde ich gern noch den Namen oder die ID des Objects, auf das gerade geklickt wird, auslesen und diesen Wert dann in die Variable einfügen. Die einzige passende Abfrage, die ich gefunden habe ist Game.GetLocationName(). Damit erhält man den String, der bei "Description" eingetragen ist (nicht den Namen des Objects, wie ich nach 1000 Versuchen endlich gemerkt habe). Das ist aber kein Problem, man kann ja bei Name und Description das gleiche haben. Ich würde es also so machen:

Code: Alles auswählen

String variable = Game.GetLocationName(mouse.x, mouse.y);
Object*test = variable; //Hier liegt das Problem: der String kann nicht zu einem Object umgewandelt werden.
test.Animate(...) //test sollte jetzt eigentlich den Namen des Objects einfügen.
Wie also kann ich den String konvertieren? Oder kann ich die Abfrage anders machen?

Vielen Dank für die Hilfe!
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Variable statt Namen von Objects verwenden?

Beitrag von KhrisMUC »

Code: Alles auswählen

Object*test = Object.GetAtScreenXY(mouse.x, mouse.y);
Dasselbe geht mit InvItems, Hotspots, etc.
Das mit den Strings vergiss ganz schnell wieder; "Description" spielt ausschließlich eine Rolle, wenn der Spieler z.B. angezeigt bekommt, was gerade unter der Maus ist o.Ä.
Es gibt keine Möglichkeit, einen String direkt in ein Objekt "umzuwandeln" (logisch, da sonst zwei Objekte nicht die gleiche Beschreibung haben dürften, was oft aber nötig ist).
(Man kann aber natürlich fünf Schrank-Objekte haben, deren Description "Schrank" ist, und allgemein testen, ob der Spieler gerade einen der Schränke angeklickt hat, ohne alle fünf einzeln durchzugehen.)

Was allerdings geht, und sogar bisweilen notwendig ist, da man im global script Objekte nicht mit ihrem Scriptname ansprechen kann:

Code: Alles auswählen

  Object*test = Object.GetAtScreenXY(mouse.x, mouse.y);
  if (test == null) return;   // aussteigen, da test.ID sonst einen "null pointer reference"-Fehler erzeugt
  int id = test.ID;    // Objektnummer in 'id' speichern
  if (id < 5) Display("Du hast auf eins der Objekte 0 bis 4 geklickt.");
Use gopher repellent on funny little man
Benutzeravatar
Stalker07
Frischling
Frischling
Beiträge: 5
Registriert: 05.10.2008, 23:50

Re: Variable statt Namen von Objects verwenden?

Beitrag von Stalker07 »

Oh, danke, das ist natürlich viel besser! Genau das habe ich gesucht. Dachte ich mir doch, dass das nicht so kompliziert sein kann! :D
Antworten