Ton im gesamten Projekt deaktivieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ton im gesamten Projekt deaktivieren

    Moin zusammen,

    derzeit bastel ich an einem Optionsmenü für mein Spiel - wie man es eigentlich von jedem gängigen Mobile-Game kennt.

    Ich öffne das Options-Menü und habe unter anderem eine Checkbox um Musik (oder Sound) zu de-/aktivieren.

    Das Spiel startet generell erstmal mit Musik. Gehe ich nun ins Optionsmenü und deaktiviere die Checkbox, stoppt er zwar die Musik, GM versucht diese aber gleich wieder zu starten, da ich in der gleichen Abfrage auch die Abfrage drin habe, was passieren soll, wenn der Ton nicht läuft (das er ihn halt starten soll). Aktiviere ich die Checkbox wieder, dann startet er auch normal wieder meine Musik. Lediglich der Punkt mit dem deaktivieren bekomme ich nicht gebacken. Ich weiss wo der Fehler liegt... aber momentan hab ich so ein Knick auf der Leitung, dass mir das wahrscheinlich sehr einfache Problem als unlösbar vorkommt :(

    Ich poste einmal mein Startmenü (ist nur ein Objekt im Raum) und einmal die Musik Checkbox um zu verstehen, wie ich es derzeit anstelle:

    Im Startmenüobjekt (obj_start_menu) gibt es 3 Events:

    Create-Event
    Spoiler anzeigen

    GML-Quellcode

    1. global.main = true
    2. global.settings = false
    3. global.credits = false
    4. instance_deactivate_object(obj_checkbox_sound)
    5. audio_play_sound(sound_start_menu,1,true);


    Step-Event
    Spoiler anzeigen

    GML-Quellcode

    1. // Hauptmenu
    2. if global.main = true
    3. {
    4. // Play Button
    5. if point_in_rectangle(mouse_x, mouse_y, room_width/2-124.5,room_height/2-100,room_width/2+124.5,room_height/2+148) && mouse_check_button_released(mb_left)
    6. {
    7. instance_create(0,0,obj_world_1_FadeIn)
    8. audio_stop_sound(sound_start_menu);
    9. }
    10. // Settings Button
    11. if point_in_rectangle(mouse_x, mouse_y, room_width/2-350,room_height/2-80,room_width/2-226,room_height/2+44) && mouse_check_button_released(mb_left)
    12. {
    13. global.main = false
    14. global.credits = false
    15. global.settings = true
    16. }
    17. // Quit Button
    18. //if point_in_rectangle(mouse_x, mouse_y, room_width/2-150, room_height/2+50, room_width/2+150, room_height/2+100) && mouse_check_button_released(mb_left)
    19. // {
    20. // game_end()
    21. // }
    22. // Spiel beenden
    23. if keyboard_check(vk_backspace)
    24. {
    25. if show_question("Spiel beenden?")
    26. game_end()
    27. }
    28. // Credits Button
    29. if point_in_rectangle(mouse_x, mouse_y, room_width/2+226,room_height/2-80,room_width/2+350,room_height/2+44) && mouse_check_button_released(mb_left)
    30. {
    31. global.main = false
    32. global.credits = true
    33. global.settings = false
    34. }
    35. // Settings-Checkboxen deaktivieren
    36. instance_deactivate_object(obj_checkbox_sound)
    37. }
    38. // Settings Menu
    39. if global.settings = true
    40. {
    41. // Close Button (X)
    42. if point_in_rectangle(mouse_x, mouse_y, room_width/2+380,room_height/2-240,room_width/2+430,room_height/2-180) && mouse_check_button_released(mb_left)
    43. {
    44. global.main = true
    45. global.credits = false
    46. global.settings = false
    47. }
    48. if keyboard_check(vk_backspace)
    49. {
    50. global.main = true
    51. global.credits = false
    52. global.settings = false
    53. }
    54. // Settings-Checkboxen aktivieren
    55. instance_activate_object(obj_checkbox_sound)
    56. }
    57. // Credits Menu
    58. if global.credits = true
    59. {
    60. // Close Button (X)
    61. if point_in_rectangle(mouse_x, mouse_y, room_width/2+380,room_height/2-240,room_width/2+430,room_height/2-180) && mouse_check_button_released(mb_left)
    62. {
    63. global.main = true
    64. global.credits = false
    65. global.settings = false
    66. }
    67. if keyboard_check(vk_backspace)
    68. {
    69. global.main = true
    70. global.credits = false
    71. global.settings = false
    72. }
    73. // Settings-Checkboxen deaktivieren
    74. instance_deactivate_object(obj_checkbox_sound)
    75. }
    Alles anzeigen


    Draw-Event
    Spoiler anzeigen

    GML-Quellcode

    1. //Gui Main Menu
    2. if global.main = true
    3. {
    4. draw_set_color(c_black);
    5. draw_set_alpha(0.5);
    6. draw_roundrect(room_width/2-450,room_height/2-250,room_width/2+450,room_height/2+250,true);
    7. draw_roundrect(room_width/2-451,room_height/2-251,room_width/2+451,room_height/2+251,false);
    8. draw_set_alpha(1)
    9. draw_set_color(make_color_rgb(170,170,0))
    10. draw_set_font(font_start_menu)
    11. draw_text(room_width/2-210,room_height/2-220,"S W I F T Y")
    12. // Start Button
    13. draw_sprite(spr_play,0,room_width/2-124.5,room_height/2-100)
    14. // Settings Button
    15. draw_sprite(spr_settings,0,room_width/2-350,room_height/2-80)
    16. // Credits Button
    17. draw_sprite(spr_credits,0,room_width/2+226,room_height/2-80)
    18. // Quit Button
    19. //draw_set_color(make_color_rgb(170,170,0))
    20. //draw_roundrect(room_width/2-150,room_height/2+150,room_width/2+150,room_height/2+200,true);
    21. //draw_roundrect(room_width/2-149,room_height/2+151,room_width/2+149,room_height/2+199,false);
    22. //draw_set_color(c_black);
    23. //draw_text(room_width/2-100,room_height/2+150,"Quit Game")
    24. }
    25. //Gui Credits Menu
    26. if global.credits = true
    27. {
    28. draw_set_color(c_black);
    29. draw_set_alpha(0.5);
    30. draw_roundrect(room_width/2-450,room_height/2-250,room_width/2+450,room_height/2+250,true);
    31. draw_roundrect(room_width/2-451,room_height/2-251,room_width/2+451,room_height/2+251,false);
    32. draw_set_alpha(1)
    33. draw_set_color(make_color_rgb(170,170,0))
    34. draw_set_font(font_start_menu)
    35. draw_text(room_width/2-190,room_height/2-220,"C R E D I T S")
    36. draw_sprite(spr_button_close,0,room_width/2+500,room_height/2-110)
    37. draw_set_color(c_white);
    38. draw_text(room_width/2-400,room_height/2-150,"Programming / Dev: Mirko Haesselbarth")
    39. draw_text(room_width/2-400,room_height/2-50,"Concept Artist / Design: Jorge Reissner")
    40. draw_text(room_width/2-400,room_height/2+50,"Sound / Musik: Matthias Schott")
    41. draw_text(room_width/2-400,room_height/2+150,"Story / Content: Patrick Berg")
    42. }
    43. //Gui Settings Menu
    44. if global.settings = true
    45. {
    46. draw_set_color(c_black);
    47. draw_set_alpha(0.5);
    48. draw_roundrect(room_width/2-450,room_height/2-250,room_width/2+450,room_height/2+250,true);
    49. draw_roundrect(room_width/2-451,room_height/2-251,room_width/2+451,room_height/2+251,false);
    50. draw_set_alpha(1)
    51. draw_set_color(make_color_rgb(170,170,0))
    52. draw_set_font(font_start_menu)
    53. draw_text(room_width/2-190,room_height/2-220,"S E T T I N G S")
    54. draw_sprite(spr_button_close,0,room_width/2+500,room_height/2-110)
    55. }
    Alles anzeigen



    So.... der Raum funktioniert auch soweit perfekt. Nun kommen wir zum "Soundcheck" :)
    Gehe ich in das Settingsmenü, wird das Objekt der Checkbox erstellt. Dort wird geregelt, ob mit oder ohne Ton.

    Checkbox von den Soundeinstellungen (obj_checkbox_sound)

    Create
    Spoiler anzeigen

    GML-Quellcode

    1. /// Initialize Checkbox
    2. value = true;
    3. is_focus = false;
    4. is_over = false;
    5. label = "Music On/Off";


    Step-Event
    Spoiler anzeigen

    GML-Quellcode

    1. if value = false && audio_exists(sound_start_menu)
    2. {
    3. audio_stop_sound(sound_start_menu);
    4. }
    5. if value = true && audio_exists(sound_start_menu)
    6. {
    7. //do nothing
    8. }
    9. else
    10. {
    11. audio_play_sound(sound_start_menu,1,true);
    12. }
    Alles anzeigen


    Left-Pressed
    Spoiler anzeigen

    GML-Quellcode

    1. /// Checkbox Focused
    2. is_focus = true;


    Left-Released
    Spoiler anzeigen

    GML-Quellcode

    1. /// Toggle Value if focused
    2. if (is_focus)
    3. value = !value;


    Glob Left-Released
    Spoiler anzeigen

    GML-Quellcode

    1. /// Checkbox Unfocused
    2. is_focus = false;


    Draw
    Spoiler anzeigen

    GML-Quellcode

    1. /// Draw Checkbox
    2. // Checkbox
    3. draw_self();
    4. // Checkmark
    5. if (value)
    6. draw_sprite_ext(spr_checkbox_checked, 0, x, y, image_xscale, image_yscale, image_angle, image_blend, image_alpha);
    7. // Label
    8. var spacing = 30; // pixels
    9. draw_text_transformed(x + sprite_width / 2 + spacing, y, label, image_xscale, image_yscale, image_angle);
    Alles anzeigen


    Sooooo.... also - das eigentlich Problem wird definitiv durch meine "Schleife" im Step-Event der Checkbox verursacht. Dessen bin ich mir schon klar geworden :D
    Ich habe nur leider echt keinen Plan es hinzubekommen... habe es mit globalen Variablen schon probiert, aber das machte es mehr schlimmer als besser.

    Irgendwer irgendwelche Lösungsvorschläge???

    LG
    Mirko
  • Hm mit Exit geht nicht... da ist es zwar dann dauerhaft ausgestellt, aber eingeschalten beokmmt man den Ton dann nicht mehr. Da durch den Exit-Befehl ja der Teil für "Ton an" überhaupt nicht mehr ausgeführt wird.

    Mit globalen Variablen habe ich bereits probiert... scheitere jedoch daran, obwohl mir das die plausibelste Lösung erscheint.

    Wie würdest Du es mit der glob. Var. lösen, anhand der beiden oben stehenden Objekte?

    LG
  • Ob das die "Musterlösung" ist, weiss ich nicht :) Aber sie funktioniert.

    Bei Spielstart einfach eine Globale Variable definieren (oder eben durch deine Checkbox ändern):

    GameStart Event

    GML-Quellcode

    1. global.SoundActive = true;


    Und bei jedem Sound / Musik den ich im Spiel abspielen will, vorher abfragen ob a) Der Sound Aktiv ist und (optional) b) der Sound nicht schon abgespielt wird (Das könnte dir vll auch helfen):

    Step Event:

    GML-Quellcode

    1. // Wenn Sound Aktiv ist und Sound nicht schon gespielt wird -> Sound abspielen
    2. if global.SoundActive = true && !audio_is_playing(sndJump1) {audio_play_sound(sndJump1,9,0);}

  • Ja ok genau so hatte ich das umgesetzt... aber... jetzt kommt wieder das aber :D

    wenn ich in dem Step-Event der checkbox die abfrage für true und false einsetze... dann habe ich ja wieder das gleiche problem wie vorher. sprich wenn nämlich die variable false ist, versucht er sie wieder auf true zu stellen... oder ich blick es grad einfach nicht -.-
  • Im Step Event, sehe ich nirgendwo, das die Variable "geändert" wird. Diese wird nur im Mousklick Event geändert?

    In deinem Step Event, wird nur geprüft ob sie True oder False ist.

    Edit:

    Liegt vielleicht an deiner Else abfrage:

    GML-Quellcode

    1. if value = false && audio_exists(sound_start_menu)
    2. {
    3. audio_stop_sound(sound_start_menu);
    4. }
    5. if value = true && audio_exists(sound_start_menu)
    6. {
    7. audio_play_sound(sound_start_menu,1,true);
    8. }


    So schon probiert?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Atomicmaster ()

  • Jawoll... hab es hinbekommen :)

    Dein Ansatz war schon richtig... so kann ich es auf das gesamte Spiel übernehmen. Im Hauptmenü selber musste ich noch einer anderen Sache bedienen, aber es klappt nun genauso wie es soll :)

    Habe es nun auch gleich als Wert in einer Datei speichern lassen, damit beim Spielstart auch die alten Settings gelten und man das ganze nicht immer wieder neu einstellen muss.

    Perfekt.... thx @Atomicmaster