GLBasic forum

Other languages => GLBasic - de => Topic started by: Worebu on 2014-Oct-30

Title: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Oct-30
Hallo Leute, wie bewerkstellige ich es am besten das wenn ich über eine Karte fahre der Sound pro Ziel nur einmal abgespielt wird.
Immer wenn ich auf dem Ziel bleibe gib's eine Schleife und der Sound wird bis zum erbrechen wiedergegeben.
Mit einem Schalter (TRUE / FALSE oder ähnlich) habe ich schon gebastelt, aber nicht so wie ich wollte.
Hat jemand einen Idee für einen "Alten Eingerosteten"? (Cooler Screenname fällt mir gerade auf)    ;)

Title: Re: Sound nur einmal wiedergeben.
Post by: erico on 2014-Oct-30
I´m not sure I understand (translator did a poor job here).

It seems to me you have a need for a sound to play when target is reached and you want it to play only once, not repeted.

You can do it by adding a check variable, or, checking the last position, for example (the later):

if ´last position´ is outside target area and ´current position´ is inside target area
play sound
endif

This way, sound will only be played once you reach the target and not while you stay in target.
I hope this approach helps, depending on your actual need, there may be better ways to do the same thing.

Cheers.
Title: Re: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Oct-30
Danke erstmal, aber wenn die Maus auf dem Ziel bleibt, wird der Sound immer abgespielt, eine Endlosschleife. Aber die möchte ich gerne verhindern.
Title: Re: Sound nur einmal wiedergeben.
Post by: Schranz0r on 2014-Oct-30
Du musst triggern,
wenn die Maus über der Karte ist spiele den Sound...

Ist die Maus weiterhin auf der Karte unterbreche die Abfrage ( BREAK)
denn der Sound wurde ja schon gespielt und es ist ja die gleiche Karte.

Bis du über einen anderen Karte und der Sound der anderne Karte ist noch aktiv BREAK die schleife...

Erst wenn der Sound aus ist und du gehst auf eine neue Karte oder bist schon drauf musst du den Sound wieder abspielen.


Eigentlich recht simpel
Title: Re: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Oct-30
Hmm, entweder kann ich dir nicht folgen oder ich habe mich falsch ausgedrückt.

Also Abfrage:


WHILE TRUE

IF Position der Maus = xxx THEN

   GOSUB Sound()

ENDIF

WEND


FUNCTION Sound:

  PLAYSOUND(0,1,1)

ENDFUNCTION

Also immer wenn IF stimmt spielt's den Sound. Bleibt die Maus auf der Position das IF stimmt läuft die Schleife. Es soll aber nur 1x der Sound kommen
auch wenn IF immer noch stimmt. Beispiel Sternenkarte: Immer wenn ein Planet mit der Maus übergangen wird gibt es einen Ton, nur einmal. Beim nächsten Planeten
wieder einen. Komme ich zurück zu dem ersten gibts es natürlich wieder einen. Der Sound ist ja nur ein kleines Beep oder so. Also keine Musik oder ähnliches.



Title: Re: Sound nur einmal wiedergeben.
Post by: Marmor on 2014-Oct-30
if mouse xxx then
if soundwurdegespielt = 0 then
soundwurdegespielt =1

playsound sound
endif
endif

if mouse <> xxx then soundwurdegespielt = 0

(pseudocode)


Title: Re: Sound nur einmal wiedergeben.
Post by: erico on 2014-Oct-31
Quote from: Worebu on 2014-Oct-30
Danke erstmal, aber wenn die Maus auf dem Ziel bleibt, wird der Sound immer abgespielt, eine Endlosschleife. Aber die möchte ich gerne verhindern.

No, if the mouse remains over the target, it won´t play the sound again because your conditional to play it only holds true if the xy coordinates of previous position was outside the target, so in the next loop, the last coordinates will be inside the target and it won´t play again.

Maybe I did not express myself correctly, if that is the case, I can write a pseudo code to illustrate it.
Title: Re: Sound nur einmal wiedergeben.
Post by: Schranz0r on 2014-Oct-31
Ich mach dir heute Nachmittag ein Beispiel wenn ich zuhause bin.
Title: Re: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Oct-31
Ja bitte, wenn ich die Maus auf der Position lasse gibs doch eine Schleife oder?.
Ich habe mal ein Video einer kleinen Karte abgestellt, Quasi eine Bastelkarte.


@Marmor: Dein Beispiel funktioniert leider nicht , ich komme immer wieder in die Schleife
Title: Re: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Nov-06
@SchranzOr, hast Du mal was gebastelt? Ich bekomme es nicht hin. Ich bin jedesmal in einer Schleife.
Title: Re: Sound nur einmal wiedergeben.
Post by: Schranz0r on 2014-Nov-07
Shit, vergessen.. :/

Mach ich sobald ich daheim bin, sry!
Title: Re: Sound nur einmal wiedergeben.
Post by: D2O on 2014-Nov-07
Hallo Worebu,
sollte so funktionieren.

Code (glbasic) Select
SETCURRENTDIR("Media") // go to media files
SYSTEMPOINTER TRUE
GLOBAL mx,my,b1,b2  /// Mausvariablen

GLOBAL snd_check = FALSE // kontroller ob sound abgespielt werden darf
GLOBAL pos_check = FALSE // Kontroller ob sich die maus über dem objekt befindet

LOADSOUND "1.wav",0 ,1



WHILE TRUE
// Mausposition abfragen
MOUSESTATE mx,my,b1,b2

//Ein rechteck zeichnen ;)
DRAWRECT 50,50,60,60,RGB(0x00, 0x80, 0xff)

// Wenn die Mausposition in dem Rechteck ist
IF  mx > 50 AND mx < 110 AND my > 50 AND my < 110 
pos_check = TRUE // Position ist wahr
ELSE
pos_check = FALSE // wenn nicht dann ist die Position falsch
snd_check = FALSE // genauso den Soundcheck auf Falsch setzen(zurücksetzen)
ENDIF

// ist also die Mausposition Wahr und der Sound wurde noch nicht abgespielt
IF  pos_check = TRUE AND snd_check = FALSE
PLAYSOUND(0, 0,1) // Sound abspielen
snd_check = TRUE // Sound wurde abgespielt
ENDIF





SHOWSCREEN
WEND
END
Title: Re: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Nov-07
Suuuper, Danke funzt. Habe ich mir mal geklaut.

@SchranzOr, trotzdem danke für deine Mühe im Vorfeld.
Title: Re: Sound nur einmal wiedergeben.
Post by: Schranz0r on 2014-Nov-07
Sry das ich zu spät war... :'(



:good: :booze:
Title: Re: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Nov-07
Hallo, macht nichts. Allerdings nun die Ernüchterung. Wenn ich auf meiner Karte mehr Punkte habe (ca. 16) funktioniert es nicht mehr. Habe alles bis auf 1 Punkt rausgenommen funzt. Wenn ich einen zweiten Punkt mit reinnehme passiert nichts. Der zweite Punkt geht dann in eine Schleife obwohl er Programmtechnisch identisch ist (bis auf die koordinaten).  :rant:
Title: Re: Sound nur einmal wiedergeben.
Post by: Marmor on 2014-Nov-07
Ich mach dir morgen das simpelste beispiel
Title: Re: Sound nur einmal wiedergeben.
Post by: Schranz0r on 2014-Nov-07
Oh kann ich doch was machen :D
Ich leg gleich los...


Edit:

so in etwa?
Title: Re: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Nov-07
Hi, Danke. Das sieht verdammt gut aus. Ich bau es mal morgen ein. Mach dann mal Meldung.
Title: Re: Sound nur einmal wiedergeben.
Post by: Schranz0r on 2014-Nov-08
 :good:
Title: Re: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Nov-08
Hallo, dein Beispiel funzt ... eingeschränkt. Wenn ich auf ein Feld gehe kommt der Sound. Verlasse ich das Feld und komme zurück ohne das andere Feld berührt zuhaben kommt nichts mehr.
Title: Re: Sound nur einmal wiedergeben.
Post by: Marmor on 2014-Nov-09
if maus <> feld then spielmukkewiederabwennmausauffeld =1

und beim nächsten mal wenn die maus im feld ist einfach gugen ob spielemukke auf 1 steht
Title: Re: Sound nur einmal wiedergeben.
Post by: erico on 2014-Nov-09
Sorry I can not follow it all with the auto translations :(

Did you try the last-mouse-coordinates technic? Does it work?
It seems to me you are mixing lots of stuff, which is good, but harder to grasp.

I can´t really understand what is going on. :(
Title: Re: Sound nur einmal wiedergeben.
Post by: Marmor on 2014-Nov-09
this is what i mean Erico and the variable to switch the sound on off is called " play music if mouse in the square " its a little bit slang but this name burns in the brain because its a hint.
Title: Re: Sound nur einmal wiedergeben.
Post by: Worebu on 2014-Nov-09
Hi, Danke für eure Hilfe. Ich glaub ich bin zu blöd ich lass es raus.
Title: Re: Sound nur einmal wiedergeben.
Post by: erico on 2014-Nov-09
Of course not, but it should not be too hard.

You can have a variable to dictate if the sound is able to play again, or you can use a copy of the last mouse coordinate for the same reason.
I guess there may be plenty of ways to implement such.