Unerklärliches Problem
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
Unerklärliches Problem
Ich weiß nicht, wo das Problem steckt, denn es kann eigentlich gar keins geben... ich habe folgendes Script:
// script for Region 1: Player walks onto region
FadeOut(4);
if(letztes==8 && weiter==9){ //wenn das letzte richtige Symbol betreten wird
player.ChangeRoom(71, 156, 376); //geht der Spieler in die Plattenhalle
}
else{ //ansonsten:
eingang=(Random(5)+1); //wird ein zufälliger Ausgang(Eingang) gewählt
if(weiter==letztes+1){ //ist das betretene Symbol richtig
letztes=letztes+1; //wird das nächste Symbol bestimmt
}
else{ //ansonsten:
irr=Random(3); //verirrt sich der Spieler:
if(irr==1){player.ChangeRoom(69, 156, 135);} //kommt er zurück in den Startraum
else{ //oder:
letztes=-1; //irrt er herum
weiter=Random(8);
}
SetPlates(weiter+1, true);
FaceLocation(FUL, 155, 134);
object[0].X=11;
object[0].Y=144;
object[7].X=223;
object[7].Y=140;
object[11].X=226;
object[11].Y=192;
object[12].X=89;
object[12].Y=87;
object[10].X=88;
object[10].Y=207;
object[9].X=3;
object[9].Y=212;
object[1].X=40;
object[2].X=42;
object[3].X=184;
object[4].X=114;
object[5].X=185;
object[6].X=113;
object[1].Y=128;
object[2].Y=173;
object[3].Y=173;
object[4].Y=175;
object[5].Y=126;
object[6].Y=122;
SetWalkBehindBase(1, 192);
SetObjectBaseline(8, 195);
p=0;
character[FUL].SetWalkSpeed(20, 20);
MoveCharacterToHotspot(FUL, eingang);
character[FUL].SetWalkSpeed(8, ;
FaceLocation(FUL, 158, 134);
fade=100;
}
}
das fade=100 bewirkt dann im Player stands on Hotspot, dass es wieder ein fadein gibt, aber seltsamerweise bleibt das Spiel nach der Zeile
if(weiter==letztes+1){ //ist das betretene Symbol richtig
letztes=letztes+1; //wird das nächste Symbol bestimmt
}
hängen. Ich hab mit dem Scrolllock geschaut, welche Programmzeilen es durchläuft, aber es durchläuft keine mehr. Sobald die letzte Aktion in der if-Abfrage erfüllt ist (getestet mit einer Display-Ausgabe), bleibt das Spiel im Leerlauf (No Script) hängen und ich weiß einfach nicht warum, Klammern habe ich schon überprüft.
// script for Region 1: Player walks onto region
FadeOut(4);
if(letztes==8 && weiter==9){ //wenn das letzte richtige Symbol betreten wird
player.ChangeRoom(71, 156, 376); //geht der Spieler in die Plattenhalle
}
else{ //ansonsten:
eingang=(Random(5)+1); //wird ein zufälliger Ausgang(Eingang) gewählt
if(weiter==letztes+1){ //ist das betretene Symbol richtig
letztes=letztes+1; //wird das nächste Symbol bestimmt
}
else{ //ansonsten:
irr=Random(3); //verirrt sich der Spieler:
if(irr==1){player.ChangeRoom(69, 156, 135);} //kommt er zurück in den Startraum
else{ //oder:
letztes=-1; //irrt er herum
weiter=Random(8);
}
SetPlates(weiter+1, true);
FaceLocation(FUL, 155, 134);
object[0].X=11;
object[0].Y=144;
object[7].X=223;
object[7].Y=140;
object[11].X=226;
object[11].Y=192;
object[12].X=89;
object[12].Y=87;
object[10].X=88;
object[10].Y=207;
object[9].X=3;
object[9].Y=212;
object[1].X=40;
object[2].X=42;
object[3].X=184;
object[4].X=114;
object[5].X=185;
object[6].X=113;
object[1].Y=128;
object[2].Y=173;
object[3].Y=173;
object[4].Y=175;
object[5].Y=126;
object[6].Y=122;
SetWalkBehindBase(1, 192);
SetObjectBaseline(8, 195);
p=0;
character[FUL].SetWalkSpeed(20, 20);
MoveCharacterToHotspot(FUL, eingang);
character[FUL].SetWalkSpeed(8, ;
FaceLocation(FUL, 158, 134);
fade=100;
}
}
das fade=100 bewirkt dann im Player stands on Hotspot, dass es wieder ein fadein gibt, aber seltsamerweise bleibt das Spiel nach der Zeile
if(weiter==letztes+1){ //ist das betretene Symbol richtig
letztes=letztes+1; //wird das nächste Symbol bestimmt
}
hängen. Ich hab mit dem Scrolllock geschaut, welche Programmzeilen es durchläuft, aber es durchläuft keine mehr. Sobald die letzte Aktion in der if-Abfrage erfüllt ist (getestet mit einer Display-Ausgabe), bleibt das Spiel im Leerlauf (No Script) hängen und ich weiß einfach nicht warum, Klammern habe ich schon überprüft.
Danke, Adventuretreff! <3
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
Ich machs mal farbig, eigentlich müsste es stimmen und die if und elses richtig verteilt sein...
// script for Region 1: Player walks onto region
FadeOut(4);
if(letztes==8 && weiter==9){ //wenn das letzte richtige Symbol betreten wird
player.ChangeRoom(71, 156, 376); //geht der Spieler in die Plattenhalle
}
else{ //ansonsten:
eingang=(Random(5)+1); //wird ein zufälliger Ausgang(Eingang) gewählt
if(weiter==letztes+1){ //ist das betretene Symbol richtig
letztes=letztes+1; //wird das nächste Symbol bestimmt
}
else{ //ansonsten:
irr=Random(3); //verirrt sich der Spieler:
if(irr==1){player.ChangeRoom(69, 156, 135);} //kommt er zurück in den Startraum
else{ //oder:
letztes=-1; //irrt er herum
weiter=Random(8);
}
blabliblablum
}}
// script for Region 1: Player walks onto region
FadeOut(4);
if(letztes==8 && weiter==9){ //wenn das letzte richtige Symbol betreten wird
player.ChangeRoom(71, 156, 376); //geht der Spieler in die Plattenhalle
}
else{ //ansonsten:
eingang=(Random(5)+1); //wird ein zufälliger Ausgang(Eingang) gewählt
if(weiter==letztes+1){ //ist das betretene Symbol richtig
letztes=letztes+1; //wird das nächste Symbol bestimmt
}
else{ //ansonsten:
irr=Random(3); //verirrt sich der Spieler:
if(irr==1){player.ChangeRoom(69, 156, 135);} //kommt er zurück in den Startraum
else{ //oder:
letztes=-1; //irrt er herum
weiter=Random(8);
}
blabliblablum
}}
Danke, Adventuretreff! <3
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Ich hoffe doch, dass Du in Deinen Skripts die Befehle einrückst, oder?
AGS macht es sogar automatisch.Jetzt kannst Du auch sofort sehen, dass alles nach dem zweiten "else" nicht ausgeführt wird, wenn "weiter==letztes+1" wahr ist, d.h. das Spiel wartet wieder auf einen Mausklick, während der Bildschirm dunkel ist.
Denk auch dran, dass ChangePlayer erst am Ende des Skriptes ausgeführt wird, d.h. der ganze Code ab SetPlates läuft vorher noch durch.
Füg nach ChangePlayer einfach ein "return;" ein.
AGS macht es sogar automatisch.
Code: Alles auswählen
FadeOut(4);
if(letztes==8 && weiter==9){ //wenn das letzte richtige Symbol betreten wird
player.ChangeRoom(71, 156, 376); //geht der Spieler in die Plattenhalle
}
else{ //ansonsten:
eingang=(Random(5)+1);
if(weiter==letztes+1){ // IST DIESE BEDINGUNG WAHR,
letztes=letztes+1; // IST NACH DIESER ZEILE SCHLUSS
}
else{ //ansonsten:
irr=Random(3); //verirrt sich der Spieler:
if(irr==1) {
player.ChangeRoom(69, 156, 135); //kommt er zurück in den Startraum
return; // HIER EIN RETURN REIN
}
else { //oder:
letztes=-1; //irrt er herum
weiter=Random(8);
}
SetPlates(weiter+1, true);
FaceLocation(FUL, 155, 134);
...
[schnipp]
...
}
}
Denk auch dran, dass ChangePlayer erst am Ende des Skriptes ausgeführt wird, d.h. der ganze Code ab SetPlates läuft vorher noch durch.
Füg nach ChangePlayer einfach ein "return;" ein.
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Wie gesagt:
Ich vermute mal, dass vor "SetPlates(weiter+1, true);" eine } reingehört, und am Ende eine } raus.khrismuc hat geschrieben:Jetzt kannst Du auch sofort sehen, dass alles nach dem zweiten "else" nicht ausgeführt wird, wenn "weiter==letztes+1" wahr ist, d.h. das Spiel wartet wieder auf einen Mausklick, während der Bildschirm dunkel ist.
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55