2017-06-29 1 views
1

Erstens, hier ist ein wenig von einer Hintergrundgeschichte. Ich benutze die Game Engine Stentlic (die Schnittstelle kann mit Scratch verglichen werden), um grundlegende Spielentwicklung mit zu lehren. Leider, da es sich um ein eher kleines Team handelt, fehlen mir noch ein paar nützliche Funktionen, daher habe ich beschlossen, eigene Erweiterungen dafür zu erstellen. Ich kenne mich in C#, Java und UnityScript aus, aber diese Erweiterungen müssen in Haxe geschrieben werden. Ich habe bereits ein paar Tage damit verbracht, meine Antworten auf der API-Seite zu finden, aber das ist weit über meine Erfahrung hinaus.Kann nicht auf Funktion in statische Methode/stackoverflow Fehler zugreifen - Haxe

Das erste Problem ist, dass ich einfach versuche, ein paar Kartenfunktionen zu verwenden, aber die Methoden sind alle statisch. Jedes Mal, wenn ich versuche, eine Funktion wie mapCount() in Zeile 16 zu verwenden, wird es mir einen Fehler sagen: Cannot access controls in static function. Bisher habe ich herausgefunden, dass dies daran liegt, dass ich nicht-statische Funktionen nicht von einer statischen Methode aus aufrufen kann, aber ich habe keine Ahnung, wie ich das angehen soll (und wahrscheinlich weitere Probleme wie diese in der Zukunft).

Das zweite Problem ist, dass, wenn ich Zeile 14 auskommentiere und Zeile 16 auskommentiere, das Spiel gut kompiliert, aber mit einem Stackoverflow-Fehler abstürzt. Die Argumente für diese Funktion sind: createRecycledActor(actorType, x, y, layerPosition)

Hier ist der aktuelle Stand meines Skripts, im Moment nicht viel zu tun, aber ich nehme babysteps um mich in dieser neuen Sprache zu lernen. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen!

Ps, funktioniert die Trace-Funktion in Zeile 15 gut btw.

Antwort

3

Da controls eine Mitgliedsvariable ist. d.h. jede Klasseninstanz hat ihr eigenes controls. Während eine statische Funktion eine Funktion auf Klassenebene ist. d.h. jede Klasse (unter allen Instanzen) hat nur eine Kopie der Funktion.

So können Sie in einer statischen Funktion nicht auf Membervariablen zugreifen, da sie nicht wissen können, von welcher Instanz nach diesem Member gesucht werden soll.

Um Ihr Problem zu lösen, machen Sie entweder controls eine static var, oder übergeben Sie die Elementsteuerelemente als Parameter an Ihre statische Funktion.

übrigens wurde die Sprache seit Jahren offiziell als Haxe (statt haXe) benannt.

+0

Das macht absolut Sinn! Ich habe noch nie mit statischen Variablen gearbeitet, und soweit ich mich erinnern kann, sind diese Variablen nicht in der Lage, den Wert zu ändern, wenn sie einmal als statische Variable initiiert wurden. Das hat mich davon abgehalten, sie statisch zu machen. Kannst du mir vielleicht erklären, was ich hier falsch verstehe? Wie für den Stackoverflow Fehler habe ich gerade dieses Problem herausgefunden. Der Akteur, den ich mit dieser Funktion erstelle, ist mit demselben Skript verbunden, so dass dieser Code jedes Mal, wenn der artikulierte Darsteller auftaucht, immer wieder abläuft. Total mein Schlechter! – sdieters

+0

Sowohl statische als auch nicht statische (Member-) Variablen können geändert werden. Angenommen, 'controls' ist jetzt eine statische Variable, sagen Sie einfach' controls = new Map() 'in Ihrer Funktion, um ihren Wert in eine neue Map zu ändern (oder' MobileGameKit.controls = new Map() 'wenn Sie außerhalb der Klasse sind) – KevinResoL

Verwandte Themen