Hallo zusammen,
Sicherlich kennt der eine oder andere das, das GLB nicht kompilieren will und zeigt mit einer Fehlermeldung auf eine Stelle, die erstmal mal gar nichts mit dem Fehler zu tun haben scheint. Bei mir zeigt er gerade mit der Fehlermeldung ""q_core.gbas"(0) error : wrong argument type :" auf die 2. Zeile meiner ersten Quelldatei. Darin steht:
GLOBAL QMO_Motions, QMO_Objects
Selbst wenn ich die Zeile auskommentiere macht er das gleiche. Ich steh auf dem Schlauch, deswegen meine Frage: Was will der Kompiler? Was könnte er bemängeln?
Leider hatte ich verfrüht abgespeichert und beendet, so das undo nicht mehr funktionieren kann.
Danke im Vorraus!
Hätte ich mal 5 Minuten überlegt vor dem Posten. Hatte gestern noch den gescheiterten Versuch unternommen ein Type als Referenz aus einer Funktion zurückzugeben. Sozusagen ein Handle/Pointer auf ein Mitglied einer Typeliste der unabhängig vom index zu gebrauchen ist. Habe alles Rückgängig gemacht. Jetzt funktioniert es wieder. :blink:
aber nen "pointer" zu übergeben geht!
FUNCTION Bla AS MyType: x,y,z
LOCAL pointer AS MyType
pointer.x = x
// ... usw
RETURN pointer
ENDFUNCTION
Super! Danke für deinen Kommentar. Aber geht auch:
GLOBAL MyTypes[] as MyType
FUNCTION Bla AS MyType: x,y,z
LOCAL pointer AS MyType
pointer = MyTypes[1]
// ... usw
RETURN pointer
ENDFUNCTION
so das pointer nicht nur eine Kopie ist, sondern eine Änderung in dem Rückgabetype auch zu Änderungen in MyTypes[1] führen (soz. BYREF umgekehrt). Unabhängig davon ob das Object jetzt vielleicht schon MyTypes[0] ist. So wie ich mich erinnere es mit HANDLE() und OBJECT() in dem anderen Basic-Dialekt gemacht zu haben.
GLOBAL MyTypes[] as MyType
FUNCTION Bla: x,y,z
LOCAL pointer AS MyType
pointer.x = x
// ... usw
DIMPUSH MyTypes [],pointer
RETURN LEN(MyTypes[])-1 // return "handle"
ENDFUNCTION
Im Code kannst du dann machen :
LOCAL handle = Bla(10,20,30)
PRINT MyTypes[handle].x, 10, 10
//usw :)
Ja genau so mache ich das ja. Aber handle ist leider nur ein index, ein Stelle im Array. Wenn ich irgendws lösche ist der index für die Katz. Ich mache das jetzt so, das ich die Sachen nicht lösche sondern nur My_Type.del auf TRUE und bei der Type-Erstellung diese überschreibe. Soweit so gut. Jetzt weiß ich aber immer noch nicht ob ich z.B. mit dem index 40 ein Object anspreche das ich will, oder ob dieses schon längst gelöscht ist und dort stattdessen ein anderes ist. Ich habe schonmal daran gedacht, dass man noch ein eindeutigen Namen mit in den type rein nimmt, so in etwa:
sprite1=Createsprite (xPos,yPos,xTex,yTex,width,height, layer, NAME="sprite1")
Perfekt ist das irgendwie noch nicht.