Backwards animation
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
eieiei AGS will nicht so wie ich will und sendet mir beim testen folgende Fehlermeldung:
Error: run_text_script: error 6 running function "game_start":
Error: Array index out of bounds (index 42, bounds: 0...41)
in Global script (line 136)
from Global script (line 285)
sieht so aus, als klappe das mit den Arrays nicht, was (
Error: run_text_script: error 6 running function "game_start":
Error: Array index out of bounds (index 42, bounds: 0...41)
in Global script (line 136)
from Global script (line 285)
sieht so aus, als klappe das mit den Arrays nicht, was (
Danke, Adventuretreff! <3
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
while(r<=5) { // vier Räder
c=1;
while(c<=rad[r].zaehne) {
if (r==1) rad[r].sprite[c]=1767+c; // rad 1: sprites 1611 - 1623
if (r==2) rad[r].sprite[c]=1611+c; // rad 2: sprites 1846 - 1865
if (r==3) rad[r].sprite[c]=1845+c;
--> Zeile 136 if (r==4) rad[r].sprite[c]=1665+c;
if (r==5) rad[r].sprite[c]=1632+c;
c++;
}
r++;
}
}
Das Rad vier hat bei mir 42 Sprites, die scheinbar nicht in den Array passen.
c=1;
while(c<=rad[r].zaehne) {
if (r==1) rad[r].sprite[c]=1767+c; // rad 1: sprites 1611 - 1623
if (r==2) rad[r].sprite[c]=1611+c; // rad 2: sprites 1846 - 1865
if (r==3) rad[r].sprite[c]=1845+c;
--> Zeile 136 if (r==4) rad[r].sprite[c]=1665+c;
if (r==5) rad[r].sprite[c]=1632+c;
c++;
}
r++;
}
}
Das Rad vier hat bei mir 42 Sprites, die scheinbar nicht in den Array passen.
Danke, Adventuretreff! <3
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Seltsam, .sprite[] ist im Header eigentlich mit [50] deklariert, es sollten also .sprite[0] - .sprite[49] zur Verfügung stehen.
Ersetz doch mal im Header die 50 durch eine 60 oder so. Vielleicht nützt es ja was.
Mir ist noch aufgefallen, dass Du "sprites 1611 - 1623" geschrieben hast (wenn auch in der Zeile drüber), dann aber "if (r==2) rad[r].sprite[c]=1611+c;" im Code stehen hast. Denk dran, dass c von eins ab zählt, also müßte es wahrscheinlich "1610+c;" heißen.
Ersetz doch mal im Header die 50 durch eine 60 oder so. Vielleicht nützt es ja was.
Mir ist noch aufgefallen, dass Du "sprites 1611 - 1623" geschrieben hast (wenn auch in der Zeile drüber), dann aber "if (r==2) rad[r].sprite[c]=1611+c;" im Code stehen hast. Denk dran, dass c von eins ab zählt, also müßte es wahrscheinlich "1610+c;" heißen.
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
hmmm ich glaube jetzt klappt es tatsächlich...
EDIT: zu früh gefreut...
Error: run_text_script1: error -6 running function "object0_a":
Error: Array index out of bounds (index: -1, bounds 0..59)
in Global script line 152
from Global script line 159
from Room script 72 line 35
das anklicken des zahrads (object0) löst die funktion "reader_drehen" aus.
function rad_drehen(int r, bool rechts) {
if (rechts) rad[r].pos++;
else rad[r].pos--;
if (rad[r].pos==0) rad[r].pos=rad[r].zaehne;
if (rad[r].pos==rad[r].zaehne+1) rad[r].pos=1;
object[r].Graphic=rad[r].sprite[rad[r].pos]; // Globalscript line 152
}
EDIT: zu früh gefreut...
Error: run_text_script1: error -6 running function "object0_a":
Error: Array index out of bounds (index: -1, bounds 0..59)
in Global script line 152
from Global script line 159
from Room script 72 line 35
das anklicken des zahrads (object0) löst die funktion "reader_drehen" aus.
function rad_drehen(int r, bool rechts) {
if (rechts) rad[r].pos++;
else rad[r].pos--;
if (rad[r].pos==0) rad[r].pos=rad[r].zaehne;
if (rad[r].pos==rad[r].zaehne+1) rad[r].pos=1;
object[r].Graphic=rad[r].sprite[rad[r].pos]; // Globalscript line 152
}
Danke, Adventuretreff! <3
-
- Komplettlösungsnutzer
- Beiträge: 35
- Registriert: 17.06.2005, 14:22
Habe den Thread nur kurz überflogen. Ist das Problem vielleicht, dass die Random-Funktion die letzte Zahl ebenfalls zurückgibt?khrismuc hat geschrieben:Seltsam, .sprite[] ist im Header eigentlich mit [50] deklariert, es sollten also .sprite[0] - .sprite[49] zur Verfügung stehen.
Random(50) liefert also 0-50, der Array umfasst aber nur 0-49.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Strazer: Ne, die Sprites werden nicht mit Random() festgelegt.
DieFüchsin: Damit der Code funktioniert, muss die Anfangsposition aller Räder irgendwas von 1 bis rad[r].zaehne sein.
Angenommen, ein Rad hat 10 Zähne, dann muss die Position anfangs irgendwas von 1 bis 10 sein. Bei einer Drehung wird die Position einfach eins rauf oder runter gesetzt, und dann werden diese beiden Spezialfälle geprüft:
-Linksdrehung von Position 1 aus: Position wird auf 0 gesetzt, dann in 10 geändert.
-Rechtsdrehung von Position 10 aus: Position wird auf 11 gesetzt, dann in 1 geändert.
Falls die Anfangsposition jedoch bereits 0 ist, wird sie bei einer Linksdrehung auf -1 gesetzt, und die if-Abfragen sind wirkungslos.
rad[r].pos bleibt dann -1, und rad[r].sprite[-1] wird abgefragt, was zu der Fehlermeldung führt.
DieFüchsin: Damit der Code funktioniert, muss die Anfangsposition aller Räder irgendwas von 1 bis rad[r].zaehne sein.
Angenommen, ein Rad hat 10 Zähne, dann muss die Position anfangs irgendwas von 1 bis 10 sein. Bei einer Drehung wird die Position einfach eins rauf oder runter gesetzt, und dann werden diese beiden Spezialfälle geprüft:
-Linksdrehung von Position 1 aus: Position wird auf 0 gesetzt, dann in 10 geändert.
-Rechtsdrehung von Position 10 aus: Position wird auf 11 gesetzt, dann in 1 geändert.
Falls die Anfangsposition jedoch bereits 0 ist, wird sie bei einer Linksdrehung auf -1 gesetzt, und die if-Abfragen sind wirkungslos.
rad[r].pos bleibt dann -1, und rad[r].sprite[-1] wird abgefragt, was zu der Fehlermeldung führt.
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
function init_raeder() {
int r=1;
int c;
rad[1].zaehne=28; rad[1].pos=2;
rad[2].zaehne=12; rad[2].pos=2;
rad[3].zaehne=20; rad[3].pos=2;
rad[4].zaehne=42; rad[3].pos=2;
rad[5].zaehne=30; rad[3].pos=2;
...
hab die Räder am Anfang auf position 2 gesetzt, also müsste es doch eigentlich gehen oder?
int r=1;
int c;
rad[1].zaehne=28; rad[1].pos=2;
rad[2].zaehne=12; rad[2].pos=2;
rad[3].zaehne=20; rad[3].pos=2;
rad[4].zaehne=42; rad[3].pos=2;
rad[5].zaehne=30; rad[3].pos=2;
...
hab die Räder am Anfang auf position 2 gesetzt, also müsste es doch eigentlich gehen oder?
Danke, Adventuretreff! <3
- 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