HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Nächster Wert aus Array (https://hx3.de/editing-scripting-167/naechster-wert-array-21482/)

Steirer 22.05.2012 10:25

Nächster Wert aus Array
 
Hallo zusammen.

Ich hab leider wenig Ahnung von scripts. Bisher bestand mein kontakt mit scripts immer nur aus copy+paste. Aber jetzt brauch ich was das ich noch nirgends finden konnte.
Ich will zwei Action Menu Einträge, mit denen ich durch verschiedene Texturen auf einem Objekt vorwärts und rückwärts durchschalten kann.

Das hab ich bis jetzt für vorwärts (nextpic.sqf):
Zitat:

_Bilder = ["1.paa","2.paa","3.paa","4.paa","5.paa"];
_zahl = _Bilder select 0;
_zahl = (_zahl+1);

Schild setObjectTexture [0,_zahl];
Funktioniert aber nicht. Wegen dem (_zahl+1). Wie kann man sowas lösen?

Mir ist klar dass mein Script wahrscheinlich großer quatsch ist und dass hier wohl eine Schleife angebracht ist. Leider kenn ich mit damit noch viel weniger aus und deswegen frag ich euch nach Hilfe.

xezon 22.05.2012 10:41

probier so in der art
http://community.bistudio.com/wiki/for

Code:

for "_x" from 0 to 4 do
{
Schild setObjectTexture [0,_Bilder select _x];
}


Pfandgiraffe 22.05.2012 10:51

Aufruf wie gehabt über addAction. Die Action muß dafür dem Schild angehangen werden. Das Script blättert nur vorwärts. Schreibe ein 2. für rückwärts und ändere entsprechend.


Code:

private ["acc_pic","_schild"];
_schild = _this select 0;

_Bilder = ["1.paa","2.paa","3.paa","4.paa","5.paa"];
if (isNil "acc_pic") then {acc_pic = ""};

if (acc_pic == "") then {
    acc_pic = _Bilder select 0;
    _schild setObjectTexture [0, acc_pic];
} else {
    _dummy_a = _Bilder;
    _i = 0;
    while {(_dummy_a select _i) != acc_pic} do {
        _dummy_select = _dummy_a select 0;
        _dummy_a = _dummy_a - [_dummy_select];
    };
    if (count _dummy_a <= 1) then {_dummy_a set [1,(_Bilder select 0)]};
    acc_pic = (_dummy_a select 1);
    _schild setObjectTexture [0, acc_pic];
};
_dummy_a = [];

ungetestet!



Grüße

Steirer 22.05.2012 10:59

@Xezon:
Da wird nur das letzte Bild angezeigt, sonst passiert nix.

@Psychobastard:
Super!
Aber es erscheint ein Script Error: Lokale Variable in Globalem Bereich Line 1
Trotzdem funktionierts einwandfrei!

Pfandgiraffe 22.05.2012 11:08

...Tippfehler. Ersetze die erste Zeile mit dieser:
Code:

private ["_acc_pic","_schild"];

xezon 22.05.2012 11:10

Zitat:

Zitat von Steirer (Beitrag 413846)
@Xezon:
Da wird nur das letzte Bild angezeigt, sonst passiert nix.

Ja das ist richtig. Sollte auch nur die Art und Weise verdeutlichen wie du das Array ansprechen musst. Ich denke es wäre nicht verkehrt wenn du dir mal anschaust was Arrays sind: z.B. C/C++ - Arrays
Is jetzt hier als C++, aber das Prinzip ist das selbe.

Das wichtige hierbei ist dass ein Array immer ein Zeiger (pointer) ist. Mit der variable selbst, wie z.B. dein "_Bilder" kannst du nichts machen. Aber du kannst die Objekte auf die dein "_Bilder" zeigt ansprechen. Das sind hier in dem Fall deine "1.paa" usw Zeichenketten (strings). Und das machste mit einem string = _Bilder select zahl

Vienna 22.05.2012 20:06

Du brauchst zwei globale Variable die du z.B. in der init.sqf initialisierst:

MeineBilder = ["1.paa","2.paa","3.paa","4.paa","5.paa"];
MeinIndex = 0;


In den Aktionen stellst du den Index rauf oder runter:

Rauf:
MeinIndex = MeinIndex + 1;
if (MeinIndex > count MeineBilder - 1 ) then {MeinIndex = count MeineBilder - 1};
Schild setObjectTexture [0,MeineBilder select MeinIndex];

Runter:
MeinIndex = MeinIndex - 1;
if (MeinIndex < 0) then {MeinIndex = 0};
Schild setObjectTexture [0,MeineBilder select MeinIndex];


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias


SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119