referenz auf character?

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
Rocco
Adventure-Treff
Adventure-Treff
Beiträge: 1019
Registriert: 25.11.2003, 16:20
Wohnort: Ronville
Kontaktdaten:

referenz auf character?

Beitrag von Rocco »

im prinzip möcht ich eine template funktion für chars schreiben.

und zwar sollte das in der praxis so funktionieren, dass der modul user ganz normal einen character in ags definiert und danach einfach via funktionsaufruf den namen des characters eingibt.

zB aufruf:

Code: Alles auswählen

init_char(cHans);

// und man in der funktion dann mit diesen char(s) arbeitet.

init_char(string char1)
{
  char1.walk(.....);
}
wie mach ich das?
und was mach ich wenn ich nicht genau weiss wieviele chars dabei sind?
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

So:

Code: Alles auswählen

function init_char(Character*char1) {
  ...
}
Optionale Parameter können nur vom Typ int sein, d.h. in diesem Fall müsstest Du die IDs der Charaktere nehmen.

Mach eine neue Funktion:

Code: Alles auswählen

function init_chars(int a, int b, int c, int d, int e, int f) {
  init_char(character[a]);
  if (b>=0) init_char(character[b]);
  if (c>=0) init_char(character[c]);
  if (d>=0) init_char(character[d]);
  if (e>=0) init_char(character[e]);
  if (f>=0) init_char(character[f]);
}
Beim Importieren sieht das so aus:

Code: Alles auswählen

import function init_chars(int a, int b=-1, int c=-1, int d=-1, int e=-1, int f=-1);
init_chars hat jetzt außer a fünf optionale Parameter, die, falls nicht spezifiziert, bei der Abarbeitung der Funktion -1 sind.

Eine andere Möglichkeit (etwas eleganter, und nicht auf 6 Charaktere beschränkt) gibt es auch:
Mach eine Funktion add_init_char, die den übergebenen Charakter einem array hinzufügt und dessen Größe um eins erhöht.
Ein anschließendes init_char geht den array durch und initialisiert alle enthaltenen Charaktere.
Use gopher repellent on funny little man
Benutzeravatar
Rocco
Adventure-Treff
Adventure-Treff
Beiträge: 1019
Registriert: 25.11.2003, 16:20
Wohnort: Ronville
Kontaktdaten:

Beitrag von Rocco »

vielen dank :-)

werd ich dann gleich ausprobieren.

wie siehts mit structs aus?
würde das funktionieren?

Code: Alles auswählen

meineStruktur str;

Struct *struct = str;

*struct.structfunktion(...);
// oder ohne pointer
struct.structvariable = 27;

// und bei einer function is es wahrscheinlich gleich wie bei den chars

function init_struct(Struct*str)
{
str.membervar = xxx;
}


Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Nicht ganz:

Code: Alles auswählen

//header 

struct beispiel_struct {
  int i;
  Character*c;
  import function f(int p);
};

// import beispiel_struct beispiel;

// global script

function beispiel_struct::f(int p) {
  if (p==1) this.c.Say("Hallo.");   // nicht sicher, ob das geht
}

beispiel_struct beispiel;

function init() {
  beispiel.i = 3;
  beispiel.c = cBernard;
  beispiel.f(1);
}
Use gopher repellent on funny little man
Antworten