Objekte anschauen

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
leChuck93
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 55
Registriert: 13.05.2006, 18:01

Objekte anschauen

Beitrag von leChuck93 »

ich hab mal ne frage:
wenn der player charakter ein hotspot oder objekt anschaut und einen gegenstand erhält und dann danach den hotspot oder das objekt noch einmal anschaut soll er etwas anderes sagen

weiß jemand dazu einen script?

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

Beitrag von KhrisMUC »

Die Standardfrage mal wieder...

Erstens: Variablen.
Zweitens: Variablen.
Drittens: Gleich auf der ersten Seite ist ein thread namens "Bettler soll immer was anderes sagen", der die Lösung für Dein Problem enthält
Use gopher repellent on funny little man
Benutzeravatar
leChuck93
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 55
Registriert: 13.05.2006, 18:01

Beitrag von leChuck93 »

habs mir angesehen, ich weiß aber nicht wie ich das für den hotspot den man anguckt machen soll
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Anfang des room script:

Code: Alles auswählen

int kiste_angeschaut;
Look at kiste-RunScript:

Code: Alles auswählen

if (kiste_angeschaut==0) {
  player.Say("Da ist etwas drin!");
  player.Say("Ein Ball.");
  player.AddInventory(iBall);
  kiste_angeschaut=1;
}
else {
  player.Say("Die Kiste ist jetzt leer.");
}
Wichtig ist jetzt, dass Du diesen Code nicht blind abschreibst, sondern kapierst, was er tut.
Das Konzept von Variablen ist sehr, sehr einfach, trotzdem haben viele Leute damit Probleme. Also wenn Du Dir nicht 100%-ig sicher bist, warum ich das so gelöst habe, frag bitte nochmal nach.
Use gopher repellent on funny little man
Benutzeravatar
leChuck93
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 55
Registriert: 13.05.2006, 18:01

Beitrag von leChuck93 »

sry das ich es immer noch nicht kapiere, aber wäre es möglich das Du mir ein kleines test game schicken könntest?
Benutzeravatar
Floyd
Logik-Lord
Logik-Lord
Beiträge: 1088
Registriert: 14.03.2004, 19:59

Beitrag von Floyd »

Was genau ist denn dein Problem? Weißt du nicht, wo genau der Code hin soll, oder verstehst du die Syntax nicht?
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

Mir ist zwar auch nicht ganz klar was daran schwer zu verstehen ist, aber ich versuche das mal in möglichst vielen Einzelheiten (wahrscheinlich werden das jetzt zu viele) zu erklären:

1. Das room script:
Das room script ist der Teil des Scripts, der sich auf den einzelnen Raum bezieht, also room1.crm, room2.crm, usw; im Gegensatz dazu steht das global Script, dass sich auf das ganze Spiel, also alle Räume, Charaktere, usw bezieht. Da die Aktion in einem bestimmten Raum stattfinden soll, bemühen wir hier das room Script
int kiste_angeschaut; wird an den Anfang des room script geschrieben, weil es sich auf den ganzen Raum bezieht und nicht nur auf eine einzelne Funktion (oder anders ausgedrückt: wenn es keinen sehr guten Grund gibt, werden ints oder Strings immer am Anfang eines Scripts (egal ob room oder global bestimmt)

2. ein int (auch bekannt als Variable)
Ein int ist etwas, worin man einen Wert wie 1, 2, 3, usw speichern kann, im Gegensatz dazu steht ein String in dem man einen Text speichert. Mit ints kann man auch rechnen, z.B.:
int a=3;
in b=4;
int c;
c=a+b;
Man kann ints auch in Strings oder Strings in ints verwandeln, aber das führt jetzt zu weit. "kiste_angeschaut" ist nur ein Name, im Prinzip kannst du alles nehmen (es gibt glaub ich ein paar Einschränkungen was Sonderzeichen betrifft, aber das dürfte nie zu einem Problem werden - korrigiert mich, wenn ich mich irre
:D )
3. Das Semicolon (auch Strichpunkt genannt, oder einfach dieses ";" Zeichen)
Nach jeder Script-Zeile muss ein Semicolon gesetzt werden, dass ist damit AGS erkennt, dass dieser Befehl fertig ist (einfach dran denken)
4. Das Look at kiste run script (blöder Name, aber eigentlich eine klare Bezeichnung)
Look at ist die Funktion für etwas anschauen. Wenn du im Room Editor auf Areas gehst und dann auf den Button "Interaction" klickst (natürlich nachdem du den richtigen Hotspot ausgewählt hast), erhältst du eine Liste mit verschiedenen Interaktionen, eine davon müsste look at sein. Dort klickst du drauf und erähltst ein drop-down Menu in dem du run-script auswählst, dann noch auf "edit script" klicken und du landest im script editor (das kennen wir schon, es ist ein Teil des room scripts, aber eben nur ein Teil, damit es für dich übersichtlicher bleibt. - Das gesamte room script erreichst du übrigens über room editor - settings - button mit den eckigen Klammern).
5. Eine if-Funktion:
"if (kiste_angeschaut==0) {" damit fragst du den Wert der Variablen kiste_angeschaut ab. Wenn du eine Variable definierst hat sie zunächst immer den Wert 0. Das doppelte Gleichheitszeichen fragt, ob etwas zutreffend ist, mit einem einfachen Gleichheitszeichen setzt du die Variable auf den entsprechenden Wert. Die eckige Klammer am Ende dieser Zeile meint, dass alles was nun folgt geschehen soll, wenn die if-Abfrage zutrifft, der Spieler soll etwas sagen, usw (die nächsten Zeilen aus khrismucs script überspringe ich) kiste_angeschaut=1; setzt den Wert schließlich auf 1; durch die folgende eckige Klammer wird der if Teil abgeschlossen.
6. else
Das else sagt, dass alles folgende (eckige Klammern) geschehen soll, wenn das if vorher nicht zutrifft, also wenn kiste_angeschaut einen anderen Wert als 0 hat.
Eine kleine Bemerkung am Rande: Man könnte zunächst denken, dass man statt else nochmal if schreiben kann, dass wäre jedoch falsch, da dann der zweite Teil, ebenfalls direkt geschen würde, weil der Wert der Variablen ja zuvor geändert wurde, mit else passiert das nicht.


Alle Klarheiten beseitigt? Gut, wenn du das nächste Mal Probleme hast, stell bitte eine klare Frage. Was hast du vorher nicht kapiert? Ich bin nicht immer so nett und erkläre absolute Grundlagen in allen Einzelheiten.
Grundsätzlich sollte ein Blick in die AGS-Hilfe überaus hilfreich sein. Zu dem Thema empfehlen sich die Kapitel "Script language keywords", "Scripting Tutorial 1" und "2" und natürlich die Beginner FAQ, die du irgendwo im AGS Forum finden kannst (keine Ahnung wo, ich brauch die nicht) Ach, und ich bezweifle, dass dir irgendjemand für etwas derart einfaches ein test game macht, nicht dass das viel Arbeit wäre, aber es scheint einfach so überflüssig. :roll:
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

{} werden geschweifte Klammern genannt, nur um leChuck93 nicht zu verwirren :)

Da es eine Arbeit von nur 10 Minuten war und vielleicht auch anderen Anfängern nützt, hab ich tatsächlich ein "test game" gemacht.

http://www.2dadventure.com/ags/kiste2.zip

lechuck93, schau Dir auf jeden Fall das room script genau an, bzw. die interactions des Kisten-hotspots.

EDIT: Link korrigiert

Zur Erläuterung:

1. Wenn man eine Variable ohne Wertangabe deklariert, ist sie 0 (bzw. false bzw. ""). Wenn ich also nur int ball_genommen; schreibe, ist diese Variable 0. Schreibe ich hingegen int ball_genommen=0; ins room script, wird die Variable immer wieder auf 0 gesetzt, wenn ich den Raum neu betrete.

2. Bei einer if-Anweisung wird der Teil in Klammern "Bedingung" genannt. Diese Bedingung ist im Normalfall eine mathematische Gleichung oder Ungleichung. Es kann aber auch nur eine einzelne Variable sein, dann gilt alles ungleich 0 bzw. false als wahr.
D.h. if (ball_genommen) reicht in diesem Fall, ball_genommen hat anfangs den Wert 0, somit ist die Bedingung falsch. Nachdem man den Ball genommen hat, wird ball_genommen auf eins gesetzt, das entspricht einer wahren Bedingung.

Um alle Klarheiten zu beseitigen: if (a) ist das Gleiche wie if (a!=0).
(Es ist nicht das Gleiche wie if (a==1)!)
Zuletzt geändert von KhrisMUC am 06.11.2006, 22:40, insgesamt 1-mal geändert.
Use gopher repellent on funny little man
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

{} werden geschweifte Klammern genannt, nur um leChuck93 nicht zu verwirren
khrismuc hat natürlich recht:
{ } geschweifte Klammern
[ ] eckige Klammern

Lasst euch also nicht verwirren, ich hab das oben ziemlich schnell getippt...

Wer noch mehr Fehler findet darf sie mir zurückgeben...

Ich werd mir das Test Game mal anschauen :lol:
Edit: Sehr informativ =D> =D> =D>
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Danke, hehe, hoffen wir mal, das unerfahrene Leute das auch so sehen :)
Use gopher repellent on funny little man
Antworten