Seite 1 von 2

list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 13:13
von PureSoft
Hey Leute

Lese mich grad wieder bisschen in PureBasic mithilfe ein paar Tutorials rein. Jedoch bekomme ich hier einen Fehler den ich irgendwie nicht aufgeklärt bekomme, vielleicht könnt ihr mir helfen..

Code: Alles auswählen

Structure playershot
  x.l
  y.l
  speedX.l
  speedY.l
EndStructure

NewList playershot.playershot()

Procedure AddPlayershot(x, y, speedX, speedY)
  AddElement(playershot())
  playershot()\x = x
  playershot()\y = y
  playershot()\speedX = speedX
  playershot()\speedY = speedY
EndProcedure
Das ist nur ein Ausschnitt. Wenn ich es jedenfalls starte kommt die Meldung

"playershot() ist keine Funktion, Array, Makro oder LinkedList"

Obwohl es eine LinkedList ist?

Re: list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 13:16
von RSBasic
Das liegt daran, dass deine List nur lokal vorhanden/verfügbar ist.
Entweder definierst du deine List als Global (Global NewList playershot.playershot()) oder du übergibst deine List an deine Prozedur.

Re: list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 13:17
von ts-soft
Lokale Listen sind in der Procedure nicht bekannt!

Code: Alles auswählen

Global NewList playershot.playershot()
sollte helfen.

Re: list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 13:19
von PureSoft
Vielen Dank für diese super tolle und schnelle Hilfe, der hammer :)

Re: list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 13:22
von STARGÅTE
Und das trotz alter Foren-Engine ^^

Re: list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 14:23
von PureSoft
Hm hab jetz hinzugefügt das man die Feinde abschießen kann und sie somit gelöscht werden wenn die Verteidigung auf 0 ist.
Klappt auch bei einigen ganz gut, doch irgendwann crasht entweder der Compiler oder ungültiger Speicherzugriff kommt als Fehlermeldung in dieser Zeile

Code: Alles auswählen

If enemy()\armor < 1 
DeleteElement(enemy())
EndIf
Verstehe nicht, was daran falsch sein soll

Re: list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 14:27
von RSBasic
Versuch mal folgendes:

Code: Alles auswählen

DeleteElement(enemy(), 1)
PB-Hilfe hat geschrieben:Wenn dieser Parameter auf 1 gesetzt wird und dann das erste Element gelöscht wird, wird das zweite Element (dasjenige nach dem gelöschten Element) das neue aktuelle Element sein. Dieses Flag stellt sicher, dass nach dem Löschen immer ein gültiges aktuelles Element vorhanden ist, solange es noch Elemente in der Liste gibt.
Könnte vielleicht daran liegen, weil du kein aktuelles Element mehr hast.

Re: list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 14:32
von ts-soft
Dann gibt es aber eine andere Fehlermeldung, nämlich: kein aktuelles Element.

Wie immer ist also ein ausführbarer Code, auf ein minumum reduziert, der das Problem aufzeigt, erforderlich.
Auch wenn der Fehler an der Stelle gemeldet wird, bedeutet dies nicht unbedingt, das dieser dort erzeugt wird.

Gruß
Thomas

Re: list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 14:35
von PureSoft
Denke das Problem mit dem Fehler hat sich durch das Flag erledigt, nur crasht der Compiler weiterhin nach ein paar Sekunden..
Soll ich mal den kompletten Code posten?

Re: list() ist keine Funktion, Makro..

Verfasst: 06.04.2013 14:38
von RSBasic
Wenn es nicht viel Code ist, kannst du das machen, aber ansonsten versuch daraus einen kürzeren Beispielcode zu schreiben, dann können wir das Problem am leichtesten nachvollziehen.