Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Newbies => Thema gestartet von: schwarz am 21. Mai 2017, 01:03:49
-
Hallo,
sehe ich das richtig, dass es bei AGS keine Funktionspointer gibt?
Kann man so etwas ähnliches machen? Ungefähr so:
//myScript.ash:
struct RoomStruct {
int RoomNumber;
import function RoomFunction(int Test);
};
//room1.asc
RoomStruct myRoomStruct[2];
int RoomStruct::RoomFunction(int Test) {
return (Test * 2);
};
//room2.asc
RoomStruct myRoomStruct[3];
int RoomStruct::RoomFunction(int Test) {
return (Test / 5);
};
Damit könnte jeder Raum seine eigene Funktion haben und trotzdem wäre sie im Struct schön angeordnet.
Danke schon mal für die Hilfe, und vor allem auch für die vielen Episoden, macht immer wieder Spaß mmm zu spielen.
-
sehe ich das richtig, dass es bei AGS keine Funktionspointer gibt?
Leider ja. In AGS kann man keine Pointer auf Basistypen setzen. Oder auf selbstdefinitierte Typen.
-
Schade eigentlich. Geht sowas, wie ich schon geschrieben habe?
-
Ich wüsste nicht nie.
-
Tjoa, AGS-Script ist leider keine wirklich schöne Sprache. Wenn man richtige Programmiersprachen gewöhnt ist, wundert man sich da schon an jeder Ecke. Immerhin sind mit Version 3.4. auch mal For-Schleifen und Switch-Case-Abfragen möglich. ;D
Könnt ihr mir als eher Java-affinen Entwickler einmal kurz erläutern, was genau ein Funktionspointer ist? Für mich klingt es so als würdet ihr das implementieren wollen, was man in Java ein Interface nennt.
-
Ein Pointer ist eine Variable, deren Inhalt aber eine Speicheradresse ist. Sie zeigt also auf etwas. Hence the name. Damit kann man mehrere Bezeichner auf die gleiche Variable, oder wahrscheinlicher, das gleiche Objekt setzen.
-
Das ist schon klar, hat aber nichts mit seiner gewünschten Implementierung zu tun...
Für mich sieht es so aus, als dass er das struct dazu verwenden möchte, eine Grunddefinition für die Raum-Funktionen zu erstellen. Und das wäre wie ein Interface.
-
Tjoa, AGS-Script ist leider keine wirklich schöne Sprache. Wenn man richtige Programmiersprachen gewöhnt ist, wundert man sich da schon an jeder Ecke. Immerhin sind mit Version 3.4. auch mal For-Schleifen und Switch-Case-Abfragen möglich. ;D
Dann ist es ja gut, dass ich mich jetzt erst einarbeite. Habe mich schon etwas über die vielen if-Abfragen gewundert.
Könnt ihr mir als eher Java-affinen Entwickler einmal kurz erläutern, was genau ein Funktionspointer ist? Für mich klingt es so als würdet ihr das implementieren wollen, was man in Java ein Interface nennt.
Ich weiß jetzt nicht genau, was ein Interface ist, aber wenn es wie bei C# ist, dann ist es vermutlich fast das selbe. Bei einem Funktionspointer kann ich von außen einfach sagen, rufe die Funktion an dieser Adresse auf. Bis auf den Aufbau des Funktionsaufruf (z.B. int Test(bool Check, int Number)) kann die Funktion alles mögliche enthalten. D.h. in einem Raum wird z.B. das Licht eingeschaltet, in einem anderen das Fenster geöffnet. Von außen (Global Script) ist nicht ersichtlich, was passiert, also eine saubere Kapselung. Bin mir jetzt aber nicht mehr sicher, ob das wirklich weiter helfen würde, da bei einem Spiel doch relativ viel raumunabhängig ist.
Ist eigentlich das Türenskript in Bernard Starterpack AGS 3.21 das aktuelle? Bin da gerade etwas am rumbasteln und möchte auf der aktuellen Basis aufbauen.
-
Ein Interface ist eine Art Klasse, die nur Methodendefinitionen enthält aber keine -implentationen. Auch können keine Objekte davon erzeugt werden. Es dient nur dazu, dass andere Klassen davon ableiten können. Kurzgefasst: Eine Krücke für Java, weil der Kram keine Mehrfachvererbung kennt. (May I ask why?) Hoffentlich habe ich das jetzt nicht mit den Abstrakten Klassen verwechselt. Mein Java ist etwas eingerostet.
Das Türensystem im Bernard-SP müsste das Aktuelle sein. Gibt es ein Doors-Skript? Wenn ja, ist es das Neue.
Aktuell ist übrigens die Version für 3.4. Die hat auf alle Fälle das neue Türensystem integriert.
-
Tjoa, AGS-Script ist leider keine wirklich schöne Sprache. Wenn man richtige Programmiersprachen gewöhnt ist, wundert man sich da schon an jeder Ecke. Immerhin sind mit Version 3.4. auch mal For-Schleifen und Switch-Case-Abfragen möglich. ;D
Dann ist es ja gut, dass ich mich jetzt erst einarbeite. Habe mich schon etwas über die vielen if-Abfragen gewundert.
Jetzt wo du es sagst fällt es mir tatsächlich zum ersten mal auf.
Die Abfrage der UsedActions würde in einer switch-case-Abfrage deutlich eleganter aussehen.
Das sollen wir uns mal für ein Refactoring vormerken.
Interface sollte in Java eigentlich das gleiche wie in C# sein. Deine Beschreibung, Cone, ist da schon richtig. Aber wozu sollte man eine Mehrfachvererbung brauchen? :P