Backwards animation

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

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 :((
Danke, Adventuretreff! <3
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Stimmt, diesen thread hab ich ganz vergessen.

Poste doch mal Zeile 136 und die umliegenden, ohne Blick auf den Code kann ich schlecht helfen ;)
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

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.
Danke, Adventuretreff! <3
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

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.
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

hmmm ich glaube jetzt klappt es tatsächlich... :D

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
strazer
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 35
Registriert: 17.06.2005, 14:22

Beitrag von strazer »

khrismuc hat geschrieben:Seltsam, .sprite[] ist im Header eigentlich mit [50] deklariert, es sollten also .sprite[0] - .sprite[49] zur Verfügung stehen.
Habe den Thread nur kurz überflogen. Ist das Problem vielleicht, dass die Random-Funktion die letzte Zahl ebenfalls zurückgibt?
Random(50) liefert also 0-50, der Array umfasst aber nur 0-49.
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

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.
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

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?
Danke, Adventuretreff! <3
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Ich war erst verwirrt, aber dann hab mir Deinen Code nochmal angeschaut, fällt Dir was auf? ;) :mrgreen:
(Wär schön, wenn sich alle Probleme so leicht lösen ließen ;))
Use gopher repellent on funny little man
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

:oops:
manchmal sieh man den wald vor lauter bäumen nicht
Danke, Adventuretreff! <3
Benutzeravatar
DieFüchsin
Adventure-Gott
Adventure-Gott
Beiträge: 4406
Registriert: 12.03.2004, 16:55

Beitrag von DieFüchsin »

Puh jetzt klappts endlich, danke dir khrismuc :D

wenn du mir jetzt noch den finalen Tipp für mein anderes Problem gibst, sing ich laute Jubellieder auf dich ;)
Danke, Adventuretreff! <3
Antworten