Einzelnen Beitrag anzeigen
Alt 08.12.2013, 11:37   #1 (permalink)
SmokyJoey
Newbie
 
Registriert seit: 03.11.2013
Beiträge: 23
Standard Funktion wird nur beim ersten Durlauf korrekt abgearbeitet

Hallo,

wieder mal ein Problem...

Ich weiß nicht was ich hier falsch mache - ich versteh´s nicht.

Ich hab mir eine Funktion gebaut, welche mit Angabe eines Markers, der Richtung und der Entfernung einen zweiten Marker in Richtung und Entfernung setzt.

WMP_distance01

Code:
scriptName "wmp_distance01.sqf";

private ["_ziel", "_zielpos", "_richtung", "_abstand", "_zielSize", "_zielTyp", "_zielBrush", "_zielShape", "_zielCol", "_zielDir", "_xposM2", "_yposM2", "_markerNeu"];


_ziel = _this select 0;
_zielpos = [];
_richtung = _this select 1;
_abstand = _this select 2;


if (typename _ziel == typename objnull) exitWith {hintSilent "Kein Marker angegeben";}; 
if (typename _ziel == typename "") then {_zielpos = markerpos _ziel;};
	
_zielSize = MarkerSize _ziel;
_zielTyp = MarkerType _ziel;
_zielBrush = MarkerBrush _ziel;
_zielShape = MarkerShape _ziel;
_zielCol = MarkerColor _ziel;
_zielDir = MarkerDir _ziel;


_xposM2 = (_zielPos select 0) + _abstand * (sin _richtung);
_yposM2 = (_zielPos select 1) + _abstand * (cos _richtung);

_markerNeu = createMarker [format ["_Marker_%1", _richtung], [_xposM2, _yposM2, 0]];
_markerNeu setMarkerSize _zielSize;
_markerNeu setMarkerType _zielTyp;
_markerNeu setMarkerBrush _zielBrush;
_markerNeu setMarkerShape _zielShape;
//_markerNeu setMarkerText "Spawnmarker";
_markerNeu setMarkerColor _zielCol;
_markerNeu setMarkerDir _zielDir;


if (true) exitWith {};

eine andere Funktion soll mir von einem Marker ausgehend mit Angabe des Umkreises zufällige Marker im Umkreis generieren und nutzt dabei auch die Funktion wmp_distance01:


Code:
scriptname "wmp_randomMarkers.sqf";

private ["_umkreis", "_rad", "_count"];

_umkreis = _this select 0;
_count = 0;
_rad = 0;


for "_rad" from 0 to 360 step 10 do
    {
        ["droppos",_rad,(ceil random _umkreis)] spawn wmp_distance01;
        _count = _count + 1;
        
        _nameArray = ["", "_umkreis", "_rad", "_count"];
	[_nameArray, _umkreis, _rad, _count] spawn wmp_ShowVars;
        
      sleep 1;
    };


if (true) exitWith {_count};
Via Funkauslöser rufe ich ein Testscript auf:

Code:
_counta = [500] call wmp_RandomMarker;


sleep 10;


_countb = [2000] call wmp_RandomMarker;


_countc = _counta + _countb;


sleep 5;

hintC format ["%1", _countc];
wenn ich den Test starte, passiert im ersten Durchlauf von "wmp_RandomMarker" auch was passieren soll - im Umkreis von 500 werden mir Marker generiert.
beim zweiten Durchlauf von "wmp_RandomMarker" werden mir zwar die korrekten Werte zurück geliefert, aber es werden keine Marker mehr generiert.
Was übersehe ich hier?


EDIT: Hat sich erledigt - Problem erkannt. Manchmal übersieht man einfachste Dinge.

Problem war dir Namensgebung der Marker. Beim ersten Durchlauf haben die Marker beim generieren den Namen "Marker_" und die Richtung bekommen also "Marker_10", "Marker_20", "Marker_20" .... "Marker_360".
was natürlich beim 2-ten Durchgang Probleme verursachte, da ja wieder Marker mit den selben Namen erzeugt wurden.

LÖSUNG:
Ich frage jetzt die Anzahl des Funktions-Aufrufes mit ab und verwende sie bei der Namensgebung mit:

erster Durchlauf:
"Marker_010", "Marker_020", "Marker_030" .... "Marker_0360".

nächster Durchlauf:
"Marker_110", "Marker_120", "Marker_130" .... "Marker_1360".

....

Sorry für den damit unnützen Thread - @Moderatoren bitte Löschen oder falls es die Nachwelt mal braucht lassen.

Geändert von SmokyJoey (08.12.2013 um 14:03 Uhr). Grund: selber auf die Lösung gekommen
SmokyJoey ist offline