Ich verwende ein spezifisches Framework für die Erstellung von Spielen, aber ich denke, die Frage bezieht sich auf JavaScript
Ich habe versucht, ein Erzählskript zu erstellen, damit der Spieler sehen kann: "Der Ork trifft dich." am unteren Rand seines Bildschirms. Ich wollte die letzten 4 Nachrichten auf einmal zeigen und möglicherweise dem Spieler erlauben, zurück zu schauen, um 30-50 Nachrichten in einem Protokoll zu sehen, wenn sie wollen. Um dies zu tun, richte ich ein Objekt und ein Array ein, um die Objekte hineinzuschieben.
Also habe ich anfänglich einige Variablen eingerichtet ...
%Vor%und wenn ich diesen Befehl (unten) mehrfach mit verschiedenen Daten verwende, die von einem Event aufgerufen werden, indem ich servermessage.color1 ... .message1 etc ...
manipuliere %Vor%es überschreibt das gesamte Array mit Kopien dieser Daten ... jede Idee, warum oder was ich dagegen tun kann.
Wenn ich also Farbe1 "ROT" und Meldung1 "Rover" drücke, sind die Daten korrekt, wenn ich drücke color1 "gelb" und message1 "Bus" die Daten sind zwei Kopien von .color1: "gelb" .message1: "Bus"
Wenn du servermessage
in servermessagelist
drückst, drückst du wirklich (mehr oder weniger) eine Referenz auf dieses Objekt. Änderungen, die Sie an servermessage
vornehmen, werden also überall dort reflektiert, wo Sie einen Verweis darauf haben. Es klingt wie, was Sie tun möchten, ist ein Klon des Objekts in die Liste zu schieben.
Deklarieren Sie eine Funktion wie folgt:
%Vor%Dann müssen Sie jedes Mal, wenn Sie eine Nachricht in die Liste schieben wollen, Folgendes tun:
%Vor%Wenn Sie das Objekt zum Array hinzufügen, ist es nur ein Verweis auf das Objekt, das hinzugefügt wird. Das Objekt wird nicht kopiert, indem es zum Array hinzugefügt wird. Wenn Sie später das Objekt ändern und es erneut zum Array hinzufügen, haben Sie nur ein Array mit mehreren Referenzen auf das gleiche Objekt.
Erstellen Sie ein neues Objekt für jede Hinzufügung zum Array:
%Vor%Ich hatte auch dasselbe Problem. Ich hatte ein komplexes Objekt gebissen, das ich in das Array geschoben hatte. Was ich getan habe; I Konvertiere ein JSON-Objekt als String mit JSON.stringify () und schiebe es in das Array.
Wenn es aus dem Array zurückkehrt, konvertiere ich einfach diesen String in JSON-Objekt mit JSON.parse ().
Das funktioniert gut für mich, obwohl es viel mehr runde Lösung ist. Post hier Wenn Sie alternative Möglichkeiten haben
Tags und Links javascript arrays object