problem beim array aufrufen

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • problem beim array aufrufen

    Hallo an alle, ich bin neu hier und hab gleich mal eine Frage:
    Für ein Spiel, an dem ich gerade bastle, brauche ich das Skalarprodukt aus zwei Vektoren. Jetzt hatte ich anfangs immer den Vektoren die Koordinaten a1,a2,a2 und b1,b2,b3 und c1,c2,c2 usw. Dann hatte ich ein Skript erstellt namens skalarprodukt(a1,a2,a3,b1,b3,b3) was dann eben a1*b1+a2*b2+a3*b3 zurückgegeben hat. Hat alles wunderbar funktioniert.Jetzt bin ich aber auf die idee gekommen, statt a1,a2,a3, ... arrays mit a[0],a[1],a[2] zu verwenden und so vieles zu vereinfachen. Das Skript sollte dann nur noch skalarprodukt(a[],b[]) heißen. So und jetzt das Problem: Wie sieht dann der Code im Skript aus? Ich kann leider nicht
    argument0[0]*argument1[0]+argument0[1]*argument1[1]+argument0[2]*argument1[2]
    schreiben, da argument0 ja nicht a, sondern eben der wert von a ist. Wenn ich jetzt aber stattdessen skalarprodukt("a","b") schreibe und dann statt argument0[] schreibe:
    argument0 +"[0]"
    geht es auch nicht, da das ja der string "a[1]" und nicht a[1] ist. Wie muss ich den Code ändern?
  • Ich versteh das nicht ganz: Wenn ich jetzt

    GML-Quellcode

    1. a[]= argument0;
    2. b[]= argument1;
    3. return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];

    schreibe, spuckt er mir wenn überhaupt, dann immer das Skalarprodukt aus a und b aus, auch wenn ich skalarprodukt(c,d) eingebe. dann macht das skript ja keinen Sinn. AUßerdem meldet er mir, da ich testweise nur die arrays c und d definiert habe und dann skalarprodukt(c,d) berechnen lassen wollte, das er den array a nicht kennt.
    EDIT:Auch wenn ich

    GML-Quellcode

    1. var a, b;
    2. a[] = argument0;
    3. b[] = argument1;
    4. return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];

    schreibe, gehts nicht

    EDIT2:

    Ich hab rausgefunden, dass

    GML-Quellcode

    1. a[] = argument0;

    nur den array-wert [0] von argument0 a[0] zuordnet, also nur" a[0] =argument0[0]" aber nicht "a[1]=argument0[1]" und "a[2]=argument0[2]"

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von J-L ()

  • Das ist jetzt echt verrückt: Ich glaube fast an einen Bug im Gamemaker, schaut selbst...:
    Ich hab jetzt also

    GML-Quellcode

    1. var a,b ;
    2. for (i=0; i<3; i+=1)
    3. {
    4. a[i] = argument0[i];
    5. b[i] = argument1[i];
    6. }
    7. return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];

    geschrieben. Mein Create Event für das Objekt,welches das Skript(mit der Leertaste) aufruft, lautet:

    GML-Quellcode

    1. d[0]=3 e[0]=-11
    2. d[1]=5 e[1]=13
    3. d[2]=7 e[2]=-17
    4. result=0;

    und als ergebnis liefert er -99 (Eigentlich sollte ja 3*(-11)+5*13+7*(-17)=-87 rauskommen) !! keine Fehlermeldung, aber er setzt in der for schleife sowohl a[0] als auch a[1] und a[2] zu argument0[0] , bei b genauso
    (ich hab mal testweise die return Zeile in

    GML-Quellcode

    1. a[1]*b[1]

    umgeändert, er spuckt trotzdem -33, also a[0]*b[0] aus!)

    EDIT: an einen richtigen Bug glaub ich nicht mehr, er nimmt halt einfach immer nur den array[0]-warum auch immer!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von J-L ()

  • Arrays können wahrscheinlich nicht als Argumente übergeben werden. So müsste es aber funktionieren:

    GML-Quellcode

    1. var a,b ;
    2. for (i=0; i<3; i+=1)
    3. {
    4. a[i] = variable_local_array_get(argument0,i);
    5. b[i] = variable_local_array_get(argument1,i);
    6. }
    7. return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];
    Du musst dann aber beim Funktionsaufruf beide Arrrays jeweils in Anführungszeichen setzen:

    GML-Quellcode

    1. skalarprodukt("d","e")
    Einige meiner Spiele:
  • Benutzer online 1

    1 Besucher