Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 23.05.2017, 11:23   #1 (permalink)
Newbie
 
Registriert seit: 08.08.2015
Beiträge: 46
Standard While > if > else Problem mit sounds

Hallo!

Ich habe folgendes Konstrukt:

Code:
while {true} do 
    {
        if (var > x) then 
            {
                _obj say "sound";
            }
        
        else 
            {
                deleteVehicle _obj;
            };    
    sleep 0.5;
    };
Ziel: Ich will den Sound abspielen, solange var > x. Ich will aber alle 0.5 Sek. prüfen, ob das so ist und NICHT mehrere Soundquellen übereinander hören, sondern dem fiesen Skriptgott irgendwie mitteilen, in laienhaften Worten:

- prüfe alle 0,5 Sek., ob var > x
- wenn ja, spiele den Sound
- spiele den Sound aber nicht mehrfach, sondern nur einmal
- wenn var <= x, dann kille den Sound und prüfe wieder von vorne

Mein Problem: Ohne ein Dummy anzulegen, das den Sound "sagt", kann ich den Sound unten in der else-Schleife nicht beenden. Ich müsste also irgendwie dem Dingens sagen "wenn der Sound spielt, dann leg' bitte beim nächsten Schleifendurchgang nicht noch eine Soundquelle an, sondern im besten Fall, lass den Sound doch einfach weiterspielen, bis else erfüllt ist, dann breche den Sound aber gnadenlos ab.

Aber da habe ich mir bis jetzt (vermutlich durch Knoten im Kopf) die Zunge dran ausgebissen.

Hat jemand 'ne Gnaden-Idee für mich, oder einen ganz anderen Ansatz, der das Ziel auch erfüllt? Wie gesagt, Optimum: Es spielt solange der Sound hintereinander, bis else erfüllt ist, aber gleichzeitig wird alle 0.5 Sek. überprüft, ob var > x.

wolkenstuermer ist offline  
Alt 23.05.2017, 17:18   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 38
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

_obj say "sound";
waitUntil {wasauchimmer};
deleteVehicle _obj;



Man kann es sich auch kompliziert machen...
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline  
Alt 23.05.2017, 18:34   #3 (permalink)
Newbie
 
Registriert seit: 08.08.2015
Beiträge: 46
Standard

Danke Pfandgiraffe, aber so einfach ist es leider nicht.

Ziel: Spieler sollen unter Wasser Geräusche von sich geben. Gleichzeitig soll ein Effekt einsetzen, sobald sie unter Wasser sind und wieder langsam ausblenden, wenn sie rauskommen. Der Sound soll aber SOFORT enden, wenn die Spieler die Oberfläche durchbrechen und weiterloopen wenn sie unter Wasser sind.

Problem 1: Wenn ich einen wait/sleep einbaue, klappt das mit dem Effekt nicht, weil der dann solange warten muss, wie der Sound spielt. Wenn der Sound neu generiert wird, muss der Effekt dann - selbst wenn die Spieler schon längst wieder an der Oberfläche sind - trotzdem solange warten, wie der Sound spielt. Das kann dazu führen, dass es komplett verschwommen und dunkel wird, obwohl die Spieler nicht mehr unter Wasser sind.

Problem 2: Fange ich nichts ab, wird in der Schleife alle 0.5 Sekunden (Check ob Spieler unter Wasser) das _obj neu erzeugt, die Sounds fangen an, sich zu überlagern.

Fange ich es ab, z.B. mit einem isNil _obj, dann habe ich das Problem, dass zwar die _obj nicht neu erzeugt werden, aber leider eben auch nicht, wenn der Sound zu Ende ist, sprich, da loopt dann auch nix mehr, der Sound endet nach einmal abspielen.

Und da beisst sich der Code in den Schwanz. Ich kriege es nicht hin, dass der Sound loopt, solange der Spieler unter Wasser ist und sofort endet, wenn er die Oberfläche durchbricht.

Es gibt nicht zufällig einen Befehl um Sounds zu beenden (was meiner Logik entspräche; dieses Objekt Erzeugen um Sound beenden zu können, ist irgendwie verquer)? Oder einen anderen Ansatz, der das Problem geschickt umgeht?

VG!

Geändert von wolkenstuermer (23.05.2017 um 18:38 Uhr).
wolkenstuermer ist offline  
Alt 23.05.2017, 19:28   #4 (permalink)
Newbie
 
Registriert seit: 08.08.2015
Beiträge: 46
Standard

Gibt es denn eine Möglichkeit abzufragen, wann er mit dem Sound fertig ist? Nach dem Motto

Code:
waitUntil {var == "false" or !alive player or (isNull sound) };
Also sozusagen:
Warte bis:
- die Variable auf "false" steht oder
- der Spieler tot ist oder
- der Sound fertig abgespielt hat

Geht das und wenn ja wie?
wolkenstuermer ist offline  
Alt 07.08.2017, 11:02   #5 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.192
Standard

Also erst einmal kann man in Arma nicht wirklich einen Sound, der bereits angefangen hat, beenden. Quelle: BI Forums.
https://forums.bistudio.com/forums/t...omment=1808120


Ähnlicher Workaround:
Erstelle ein invisible H, attachTo Player. Lass das H den Sound ausgeben und wenn du willst, dass er beendet wird, lösch das invisible H. Ist der Spieler wieder unter Wasser mit createVehicle ein neues H und so weiter...

Und den While true loop würde ich eher mit einem EventHandler lösen, wenn das möglich ist.
Vllt. mit AnimChanged. Ist auch gleich der Erste in der Liste:
https://community.bistudio.com/wiki/...rs#AnimChanged

Dann finde heraus, wie die Animation unter Wasser heißt und gleiche diese dann mit If Else Condition ab.

Das Problem mit While {true} ist, dass dieser niemals endet. Endlosschleife. Irgendwie nicht gut.

Zu der Möglichkeit, ob der Sound fertig ist. Meines Wissens nicht. Jedoch kannst du einfach die genaue Zeit der Sound File herausfinden (z.B. 5 Sekunden) und mit sleep 5 halt dein Script schreiben.
Würde eine .sqf verwenden.

Code:
_unit addeventHandler {"AnimChanged", {if ((animationState player) == "deine_animation") then {"deineSqf.sqf"};}};
deineSqf.sqf

Code:
_h = "Land_HelipadEmpty_F" createvehicle (position player);
player attachTo [_h, [0, 0, 0] ]; // zweiter Array ist bezogen auf offset
_soundLength = 3; // oder '_this select 0' für Parameter beim Aufruf der Funktion /SQF

while {(animationState player) == "deine_animation"} do {
    _h playSound3D _soundfile;
    sleep _soundLength;

};

Geändert von JSR (07.08.2017 um 11:20 Uhr).
JSR ist offline  
 


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Loadout nach Respawn geht mit EDEN nicht mehr Wolkenbeisser Editing & Scripting 2 01.04.2016 23:42
Entwaffnung von toten Spielern Wolkenbeisser Editing & Scripting 12 16.04.2014 08:49
J.S.R.S - Jarhead's Sounds-Redeployment Systems Termi Mods & Addons 508 08.01.2013 15:19
eigene sounds problem miromanu Editing & Scripting 27 03.10.2011 19:37
WarefareBE 2.069 (Probleme) Jackrkc Usermade Missions 6 22.07.2011 14:01


Kontakt - HX3.de - Archiv - Nach oben

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