Einzelnen Beitrag anzeigen
Alt 07.03.2015, 10:36   #2 (permalink)
Moerderhoschi
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 35
Beiträge: 2.666
Standard

Das hat einfach etwas mit dem Speicherort der Variable zu tun.

Wenn Du einer Variable einen Wert zuweist, dann wird dieser Wert einer Variable im missionNameSpace zugewiesen.

Beispiel 1:
Code:
myVar = 123;
ist das selbe wie
Code:
missionNamespace setVariable ["myVar", 123];
Beispiel 2:
Code:
myVar = "hoschi"; publicVariable "myVar";
ist das selbe wie
Code:
missionNamespace setVariable ["myVar", "hoschi", true];
Das bedeutet jede einfache Zuweisung (ohne setVariable sondern einfach nur x = y) speichert den Wert in einer Variable im missionNameSpace

Jetzt besteht aber noch die Moeglichkeit, Variablen auch an anderen Orten und Namensraeumen zu hinterlegen.

Auszug aus dem Wiki:

All available data type combinations:
  • Namespace setVariable Array
  • Control setVariable Array (static map editor control only)
  • Object setVariable Array
  • Group setVariable Array
  • Team_Member setVariable Array
  • Task setVariable Array
  • Location setVariable Array

Nehmen wir jetzt als Beispiel ein Objekt.

Ich platziere eine Auto mit dem Namen "car1" im editor und moechte in diesem Objekt einer Variable einen Wert zuweisen.
Code:
car1 setVariable ["varStoredInCar1", 123];
Wenn Du nun eine Abfrage auf die Variable varStoredInCar1 machst liefert dir die Engine nil zurueck, da eine einfache Abfrage immer den missionNameSpace abfragt
Code:
hint format ["%1",varStoredInCar1]; // liefert nil zurueck
fragst Du aber gezielt die Variable die im Objekt hinterlegt ist ab, liefert Dir die Engine auch den Wert den wir vorher zugewiesen haben zurueck.
Code:
hint format ["%1", car1 getVariable "varStoredInCar1" ]; // liefert 123 zurueck
SetVariable bietet Dir also die Moeglichkeit deine Variablen auch an anderen Orten zu hinterlegen als im missionNameSpace.

Ein gutes Beispiel hierfuer ist der ProfileNameSpace. Daten die im ProfileNameSpace gespeichert werden gehen nicht verloren, da diese in der \Eigene Dateien\Arma 3\name.vars gespeichert werden. Hier hast Du also die Moeglichkeit, Dir Werte an einem Ort zu hinterlegen, der beim beenden der Mission nicht verloren geht.

Hier wird jetzt also die Variable permanentVariable mit dem Wert 123 in dem profileNameSpace gespeichert:
Code:
profileNameSpace setVariable ["permanenteVariable", 123];
nach dem beenden der mission und einem neustart von arma sind diese daten nach wie vor noch vorhanden.

Du kannst als eine neue Mission starten und die Variable im profileNameSpace wieder abfragen
Code:
hint format ["%1", profileNameSpace getVariable "permanenteVariable" ]; // liefert 123 zurueck
Empfohlene Lektuere zum Thema:
https://community.bistudio.com/wiki/setVariable
https://community.bistudio.com/wiki/getVariable

gruß
hoschi
__________________



Geändert von Moerderhoschi (07.03.2015 um 10:39 Uhr).
Moerderhoschi ist offline   Mit Zitat antworten