Hinwenden zu einem Objekt

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

    • Hinwenden zu einem Objekt

      Dieses Skript habe ich für einen sich drehenden Geschützturm geschrieben. Habe es auch für eine Beobachtungskamera eingesetzt.


      GML-Quellcode

      1. // # # # # # # # # # # # # # #
      2. // VERHALTENSMUSTER
      3. // Hinwenden
      4. //
      5. // STEP EVENT
      6. // # # # # # # # # # # # # # # #
      7. // _____________________________________________________________________________________________
      8. // ARGUMENTS
      9. // 0 - Zielobjekt
      10. // 1 - Drehgeschwindigkeit: Rotation in Schritten
      11. // 2 - Abstand
      12. // 3 -
      13. // 4 -
      14. // 5 -
      15. // _____________________________________________________________________________________________
      16. // 1. wenn Skript in einem Event mehrmals verwendet wird bestimmt die Reihenfolge das Auslösen der Aktionen
      17. // 2. Wenn zielobjekt nicht vorhanden, wird Skript nicht ausgeführt
      18. // 3. Ist Zielobjekt in Schussbereich richtet sich Objekt so wie Objekt ohne Verzögerung aus
      19. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      20. // wenn Instanz des Objektes existiert, starte Ereignis
      21. if (instance_exists(argument0))
      22. {
      23. // Setze Werte für Rotation
      24. drehgeschwindigkeit = argument1;
      25. abstand = argument2;
      26. objekt_relativ_x = argument0.x;
      27. objekt_relativ_y = argument0.y;
      28. if (point_distance(objekt_relativ_x,objekt_relativ_y,self.x,self.y) < abstand)
      29. {
      30. // Errechne absoluten Winkel von Vektor x,y des aufrufenden Objektes zu x,y des Zielobjekt
      31. end_angle = point_direction(x,y,objekt_relativ_x,objekt_relativ_y);
      32. // Winkelangabe muß immer zwischen 0..360° liegen, bei Überschreiten wird der Wert korrigiert
      33. // Wenn Winkelangabe kleiner als 0°, in 0..360°-Bereich zurückversetzen
      34. if (image_angle < 0) {image_angle = image_angle + 360; }
      35. // Wenn Winkelangabe größer als 360°, in 0..360°-Bereich zurückversetzen
      36. if (image_angle > 360) {image_angle = image_angle - 360; }
      37. // Errechne Abstand in Grad von Zieobjekt zu aufrufendem Objekt
      38. // Weil durchlaeufe ein absoluter Wert ist, umrechnen in positiven Wert, wenn dieser negativ ist
      39. durchlaeufe = end_angle - image_angle;
      40. if (durchlaeufe < 0) {durchlaeufe = durchlaeufe * -1;}
      41. // Endscheide Rotationsrichtung
      42. // Modus eins: wenn durchlaeufe kleiner als 180°
      43. // Modus zwei: wenn durchlaeufe größer als 180°
      44. if (durchlaeufe < 180) {rotation = "eins";}
      45. else {rotation = "zwei";}
      46. // Wenn Winkel des aufrufenden Objektes zum Zielobjekt innerhalb der Drehgeschwindigkeits-Toleranz,
      47. // setze Drehung mit image_angle
      48. if (durchlaeufe>drehgeschwindigkeit)
      49. {
      50. // Rotationsmodus: one.
      51. if (rotation=="eins")
      52. {
      53. if (image_angle>end_angle) {image_angle = image_angle - drehgeschwindigkeit;}
      54. if (image_angle<end_angle) {image_angle = image_angle + drehgeschwindigkeit;}
      55. }
      56. // Rotationsmodus: two.
      57. if (rotation=="zwei")
      58. {
      59. if (image_angle<end_angle) {image_angle = image_angle - drehgeschwindigkeit;}
      60. if (image_angle>end_angle) {image_angle = image_angle + drehgeschwindigkeit;}
      61. }
      62. }
      63. else
      64. {
      65. image_angle = point_direction(x,y,objekt_relativ_x,objekt_relativ_y);
      66. }
      67. }
      68. }
      Alles anzeigen


      Viel Spaß damit
      Bevor ich nicht ganz sicher bin, sage ich lieber gar nichts. ?(
    • RE: Hinwenden zu einem Objekt

      Ich habe die Variabeln:
      drehgeschwindigkeit
      abstand

      deshalb nicht in den CreateEvent geschmissen,
      damit man das Skript mehrmals im StepEvent verwenden kann.
      So ist es möglich, einer Kanone mehrere Zielobjekte zuzuweisen.

      Bitte ignoriert die Kommentare der anderen User, da deren Aussage einfach nicht richtig ist.
      Variablen kann man auf 2 verschieden Arten deklarieren:
      1.

      GML-Quellcode

      1. var irgend_eine_var

      2.

      GML-Quellcode

      1. irgend_eine_var = "ich_bin_der Wert"


      Das würde man wissen, wenn man mal in die GameMaker-Referenz geschaut hätte.

      Hier ein Beispiel:
      Dateien
      • hinwenden.rar

        (7,17 kB, 267 mal heruntergeladen, zuletzt: )
      Bevor ich nicht ganz sicher bin, sage ich lieber gar nichts. ?(

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von vereiser ()