Eigenschaften zu einem vordefinierten Struct? (AGS 2.7)

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Eigenschaften zu einem vordefinierten Struct? (AGS 2.7)

Beitrag von [ZENSIERT] »

Hallo,

ich habe da eine Frage: Angenommen, ich habe einen Charakter. Ich nenne ihn hier einfach mal cSpieler. Nun möchte ich cSpieler eine neue variable Eigenschaft hinzufügen. Properties scheidet schonmal aus, weil das konstante Eigenschaften sind. Zum Beispiel möchte ich dem Charakter die Eigenschaft

char geschlecht;

zuweisen (gut ist jetzt ein schlechtes Beispiel, das Spiel handelt ja nicht von einer Geschlechtsumwandlung ;) ). Gut, das kann ich über eine globale Variable regeln. Was aber wenn ich will, dass alle Charaktere diese Eigenschaft besitzen sollen? Da müsste man ja die Struktur ändern. Kennt da jemand eine Möglichkeit?

Danke im Vorraus
[ZENSIERT]

P.S.: Extends scheidet aus, weil die Charaktere auf der Struktur "Character" basieren.
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

int male; // 0: female, 1: male
wäre hier sinnvoller. Char steht für ein Ascii-Zeichen.
Soweit ich weiss, gibt es diese Möglichkeit leider nicht.
Ein workaround wäre ein globaler Array.
Man könnte dann z.B. folgendes schreiben:

Code: Alles auswählen

if (male[cEgo.ID]) {
  PeeAtWall();
}
else {
  ComplainAboutExpensiveShoes();
}
Mit c???.ID erhält man die interne AGS-Editor-Nummer des Charakters.
Use gopher repellent on funny little man
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Auch ne Idee. Char wäre aber übertragbar ('m' für männlich, 'f' für weiblich und 'n' für ein neutrum)
else {
ComplainAboutExpensiveShoes();
}
rofl :lol:
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
strazer

Beitrag von strazer »

Für so etwas sind die neuen Konstanten auch ganz nützlich:

Code: Alles auswählen

int Energie[AGS_MAX_CHARACTERS];

Code: Alles auswählen

  Energie[cKerl.ID] = 100;
Wenn du mehrere variable Dinge zusammenfassen möchtest, machst du es am besten so:

Code: Alles auswählen

// main script header

struct MeinCharakterStruct {
  int energie;
  char nachname[200];
};

Code: Alles auswählen

// global script

MeinCharakterStruct Charaktere[AGS_MAX_CHARACTERS];

Code: Alles auswählen

  Charaktere[cKerl.ID].energie = 100;
  StrCopy(Charaktere[cKerl.ID].nachname, "Mueller");
Ich hab's hier mal etwas ausführlicher beschrieben: http://www.bigbluecup.com/yabb/index.ph ... #msg247166
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Auch ne Idee. Ich glaube, die Idee von strazer ist die nützlichste.

Aber was, wenn ich das jetzt auf etwas lokales beziehen will, wie Hotspots (da wird ein Name aber schwer ;) )

Kann man in AGS auch Hash-Arrays (d.h. mit namen als Schlüsseln) ohne Konstanten deklarieren? Ich bin das so von PHP gewöhnt
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
strazer

Beitrag von strazer »

Aber was, wenn ich das jetzt auf etwas lokales beziehen will, wie Hotspots (da wird ein Name aber schwer Wink )
Dann deklarierst du den Array einfach im room script anstatt im global script. Werte solcher Variablen werden gespeichert wenn man den Raum verlässt.
Oder du machst so etwas:

Code: Alles auswählen

// main script header

struct MeinRaumStruct {
  int ObjektEnergie[AGS_MAX_OBJECTS];
  int ObjektKosten[AGS_MAX_OBJECTS];
};

Code: Alles auswählen

// global script

MeinRaumStruct MeinRaum[300];

Code: Alles auswählen

  MeinRaum[7].ObjektEnergie[1] = 90;
Kann man in AGS auch Hash-Arrays (d.h. mit namen als Schlüsseln) ohne Konstanten deklarieren? Ich bin das so von PHP gewöhnt
Kenne ich nicht, kannst du genauer beschreiben was das ist und was man damit machen kann?
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

OK, in AGS gibt's nur numerische Arrays:

MeinArray[0]
MeinArray[1]
.
.
.

In PHP kann ich die Arrays auch mit NAmen indezieren:

$MeinArray[Schwamm]
$MeinArray[Seife]
.
.
.

Außerdem sind Arrays hier fexibler, es gibt keinen Maximum-Wert. Dafür ist das Durchlaufen schwerer

Diese Möglichkeit wäre in AGS nur so realisierbar:

Code: Alles auswählen

#define SCHWAMM 0
#define SEIFE 1

MeinArray[10];
MeinArray[SCHWAMM]=234;
Hash-Arrays sind vielleicht eher unter dem Namen assiotiative Arrays bekannt.
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

[Wäre da oben bloß ein X...]
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Antworten