Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: Edison Interactive am 09. April 2007, 13:31:55
-
Hi,
haben da so ein kleines Problem mit Türen...
Verwenden die Funktion any_click_on_door für unsere Türen...
nun gibt es ein Problem, da wir in
function VariableExtensions (string location) {
int r = character [GetPlayerCharacter ()].room;
int o = GetObjectAt (mouse.x, mouse.y);
int h = GetHotspotAt (mouse.x, mouse.y);
if ((r == 1) && (h == 4)) OpenCloseExtension (3, location);
else if ((r == 2) && (h == 2)) OpenCloseExtension (3, location);
[...]
else if ((r == 87) && (h == 3)) OpenCloseExtension (43, location);
else if ((r == 88) && (h == 1)) OpenCloseExtension (43, location);
[...]
}
anscheinend zu viele "else if"-Verknüpfungen haben...
allerdings geht es nicht sparsamer... gibt es eine Möglichkeit, das zu umgehen? vielleicht eine zweite Funktion zu schreiben, die dann nicht mit ">v" nach dem Hotspot, sondern mit einem anderen Buchstaben ( zum Beispiel ">b") aufgerufen werden kann? Wie müssen wir da genau vorgehen?
Vielen Dank
-
Um sowas mit >b aufzurufen, würde ich es so angehen:
Ihr erstellt zuerst unter der function "VariableExtensions" eine function mit gleichem Inhalt:
function VariableExtensions1 (string location){
// put here wich extension will show the things with variable extension (>b)
int r = character [GetPlayerCharacter ()].room;
int o = GetObjectAt (mouse.x, mouse.y);
int h = GetHotspotAt (mouse.x, mouse.y);
// hier dann die Türen genauso wie in VariableExtensions eintragen
}
Dann schreibt bei der function "CheckDefaultAction", direkt unter:
else if (Extension (location) == 'v')
{
// if the default action deppends on some events
RemoveExtension (location);
VariableExtensions (location);
}
.... das hier:
else if (Extension (location) == 'b')
{
RemoveExtension (location);
VariableExtensions1 (location);
}
Das müsste eigentlich funktionieren. Habe es zwar nicht ausprobiert, aber trotzdem. ;D
-
Grad erst gesehen:
Einfach die ganzen "else"s weglöschen, die braucht man ja eh nicht.
Damit wird aus einem riesigen if-else if-...-else if-Block einfach eine lange Reihe einzelner if-Blöcke.
Sollte klappen.
Alternativ kann man auch die Räume zusammenfassen:
if (r==10) {
if (h==1) OpenCloseExtension(5, location);
if (h==2) OpenCloseExtension(6, location);
...
}
if (r==11) {
if (h==1) OpenCloseExtension(7, location);
if (h==2) OpenCloseExtension(5, location);
...
}
...
Noch besser:
int a;
if (r==10) {
if (h==1) a=5;
if (h==2) a=6;
...
}
...
OpenCloseExtension(a, location);