Berechnen eines Kollisionswinkel

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

  • Berechnen eines Kollisionswinkel

    Hi,

    gibt es eine Möglichkeit wie ich denn Winkel X in den Bild berechnen kann, wenn der Pfeil in irgendeiner Richtung auf das Objekt trifft?
    Habe es schon mit point_direction probiert, ist aber recht unzuverlässig...
    Bilder
    • X-Berechnen.png

      2,43 kB, 238×214, 564 mal angesehen
  • Ich denke du willst das etwas abprallt?
    Dazu musst du die Normale berechnen damit du das ganze dann an ihr spiegeln kannst.
    Ich verweise mal auf einen alten post von mir, damals ging es um laser
    Laser script, request von dede165
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Ist es möglich dies auch für folgenden Code zu verwenden?


    Collision mit Objekt:

    GML-Quellcode

    1. check_Richtung=point_direction(x,y,other.x,other.y)
    2. if (get_angle_between(image_angle,check_Richtung) < 30) // Testet, ob das Objekt maximal 30° unterschied hat
    3. {
    4. with other
    5. {
    6. hp -= random_range(20,50)
    7. }
    8. instance_destroy()
    9. }
    10. else
    11. {
    12. if (get_angle_between(image_angle,check_Richtung) > 30) // Testet, ob das Objekt minimal 30° unterschied hat
    13. {
    14. move_bounce_solid(true)
    15. }
    16. }
    Alles anzeigen


    Mein Rakete prallt somit also erst bei über 30° unterschied ab.

    Eigentlich bräuchte ich ja nur ein Ersatz für check_Richtung,
    dass es nicht mehr den Mittelpunkt des anderen Objektes nimmt...
  • Ich glaube die Funktion die du suchst ist angle_difference()

    Du kannst die Normale des Objekts mit dem du kollidierst mit diesem Abschnitt aus oben gepostetem Script berechnen :

    GML-Quellcode

    1. if (collision_circle(_xx,_yy,_rad,_obj,true,true)) {
    2. for (_j = _res; _j <= _rad; _j += _res) {
    3. for (_i = 0; _i < _rad; _i += _res) {
    4. if (point_distance(0,0,_i,_j) <= _rad) {
    5. if (!collision_point(_xx + _i,_yy + _j,_obj,true,true)) { _nx += _i; _ny += _j; }
    6. if (!collision_point(_xx + _j,_yy - _i,_obj,true,true)) { _nx += _j; _ny -= _i; }
    7. if (!collision_point(_xx - _i,_yy - _j,_obj,true,true)) { _nx -= _i; _ny -= _j; }
    8. if (!collision_point(_xx - _j,_yy + _i,_obj,true,true)) { _nx -= _j; _ny += _i; }
    9. }
    10. }
    11. }
    12. if (_nx = 0 && _ny = 0) {
    13. _normal = 0;
    14. }else{
    15. _normal = point_direction(0,0,_nx,_ny);
    16. }
    Alles anzeigen

    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel: