Virtuellen Analogen Stick erstellen

  • Android

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

  • Virtuellen Analogen Stick erstellen

    Hallo,

    Für mein Android Spiel bräuchte ich einen Stick, der in 360° bewegt werden kann
    Beispiel:


    In der Studio Hilfedatei habe ich dazu leider nichts gefunden.
    Weiß jemand von euch wie man sowas am besten macht?

    Gruß, derkimba
  • Auch eine Möglichkeit:

    Create:

    GML-Quellcode

    1. ///scr_virtual_analog_stick_create(x, y, radius_touch_sensitive, radius_max, inertia);
    2. //x = Mittlere X Position des Analog Sticks
    3. //y = Mittlere Y Position des Analog Sticks
    4. //radius_touch_sensitive = Tolaranz für die Berührung Der doppelte Wert von radius_max wird empfohlen
    5. //radius_max = Die maximale Distance vom Stick zum Mittelpunkt
    6. //inertia = Trägheit 0 - Keine Bewegung 1 - Sofortige Bewegung Empfohlen wird ein Wert von 0.5
    7. virtual_analog_stick_x = argument0;
    8. virtual_analog_stick_y = argument1;
    9. virtual_analog_stick_rad_ts = argument2;
    10. virtual_analog_stick_rad_max = argument3;
    11. virtual_analog_stick_inertia = argument4;
    12. virtual_analog_stick_mp_x = virtual_analog_stick_x;
    13. virtual_analog_stick_mp_y = virtual_analog_stick_y;
    14. virtual_analog_stick_direction = 0; //360° Richtung des Analog Sticks
    15. virtual_analog_stick_intensity = 0; //0-1 Intensität des Analog Sticks
    Alles anzeigen

    Step:

    GML-Quellcode

    1. ///scr_virtual_analog_stick_step();
    2. var button_found = false;
    3. var dev_ms_x;
    4. var dev_ms_y;
    5. var virt_dis;
    6. var new_pos_x;
    7. var new_pos_y;
    8. var virt_dir;
    9. for(var dbi = 0; dbi <= 4; dbi++)
    10. {
    11. if(device_mouse_check_button(dbi, mb_left))
    12. {
    13. dev_ms_x = device_mouse_x(dbi);
    14. dev_ms_y = device_mouse_y(dbi);
    15. virt_dis = point_distance(dev_ms_x, dev_ms_y, virtual_analog_stick_x, virtual_analog_stick_y);
    16. if(virt_dis <= virtual_analog_stick_rad_ts)
    17. {
    18. button_found = true;
    19. virt_dir = point_direction(virtual_analog_stick_x, virtual_analog_stick_y, dev_ms_x, dev_ms_y);
    20. new_pos_x = virtual_analog_stick_x+lengthdir_x(min(virtual_analog_stick_rad_max, virt_dis), virt_dir);
    21. new_pos_y = virtual_analog_stick_y+lengthdir_y(min(virtual_analog_stick_rad_max, virt_dis), virt_dir);
    22. virtual_analog_stick_mp_x = virtual_analog_stick_mp_x*(1-virtual_analog_stick_inertia)+new_pos_x*virtual_analog_stick_inertia;
    23. virtual_analog_stick_mp_y = virtual_analog_stick_mp_y*(1-virtual_analog_stick_inertia)+new_pos_y*virtual_analog_stick_inertia;
    24. }
    25. }
    26. }
    27. if(!button_found)
    28. {
    29. virtual_analog_stick_mp_x = virtual_analog_stick_mp_x*(1-virtual_analog_stick_inertia)+virtual_analog_stick_x*virtual_analog_stick_inertia;
    30. virtual_analog_stick_mp_y = virtual_analog_stick_mp_y*(1-virtual_analog_stick_inertia)+virtual_analog_stick_y*virtual_analog_stick_inertia;
    31. }
    32. virtual_analog_stick_direction = point_direction(virtual_analog_stick_x, virtual_analog_stick_y, virtual_analog_stick_mp_x, virtual_analog_stick_mp_y);
    33. virtual_analog_stick_intensity = point_distance(virtual_analog_stick_x, virtual_analog_stick_y, virtual_analog_stick_mp_x, virtual_analog_stick_mp_y)/virtual_analog_stick_rad_max;
    Alles anzeigen

    Draw:

    GML-Quellcode

    1. ///scr_virtual_analog_stick_draw(sprite_ground, sprite_top);
    2. draw_sprite(argument0, 0, virtual_analog_stick_x, virtual_analog_stick_y);
    3. draw_sprite(argument1, 0, virtual_analog_stick_mp_x, virtual_analog_stick_mp_y);

    Unterstützt alles was man braucht.
  • Kann das Script von Chris987 sehr empfehlen. Funktioniert genau so, wie ich es brauche.
    Für diejenigen, die es ebenfalls nutzen wollen:
    Eure Grafiken für das Draw Event müssen auf Center gestellt werden!