Dieses Skript habe ich für einen sich drehenden Geschützturm geschrieben. Habe es auch für eine Beobachtungskamera eingesetzt.
Alles anzeigen
Viel Spaß damit
GML-Quellcode
- // # # # # # # # # # # # # # #
- // VERHALTENSMUSTER
- // Hinwenden
- //
- // STEP EVENT
- // # # # # # # # # # # # # # # #
- // _____________________________________________________________________________________________
- // ARGUMENTS
- // 0 - Zielobjekt
- // 1 - Drehgeschwindigkeit: Rotation in Schritten
- // 2 - Abstand
- // 3 -
- // 4 -
- // 5 -
- // _____________________________________________________________________________________________
- // 1. wenn Skript in einem Event mehrmals verwendet wird bestimmt die Reihenfolge das Auslösen der Aktionen
- // 2. Wenn zielobjekt nicht vorhanden, wird Skript nicht ausgeführt
- // 3. Ist Zielobjekt in Schussbereich richtet sich Objekt so wie Objekt ohne Verzögerung aus
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- // wenn Instanz des Objektes existiert, starte Ereignis
- if (instance_exists(argument0))
- {
- // Setze Werte für Rotation
- drehgeschwindigkeit = argument1;
- abstand = argument2;
- objekt_relativ_x = argument0.x;
- objekt_relativ_y = argument0.y;
- if (point_distance(objekt_relativ_x,objekt_relativ_y,self.x,self.y) < abstand)
- {
- // Errechne absoluten Winkel von Vektor x,y des aufrufenden Objektes zu x,y des Zielobjekt
- end_angle = point_direction(x,y,objekt_relativ_x,objekt_relativ_y);
- // Winkelangabe muß immer zwischen 0..360° liegen, bei Überschreiten wird der Wert korrigiert
- // Wenn Winkelangabe kleiner als 0°, in 0..360°-Bereich zurückversetzen
- if (image_angle < 0) {image_angle = image_angle + 360; }
- // Wenn Winkelangabe größer als 360°, in 0..360°-Bereich zurückversetzen
- if (image_angle > 360) {image_angle = image_angle - 360; }
- // Errechne Abstand in Grad von Zieobjekt zu aufrufendem Objekt
- // Weil durchlaeufe ein absoluter Wert ist, umrechnen in positiven Wert, wenn dieser negativ ist
- durchlaeufe = end_angle - image_angle;
- if (durchlaeufe < 0) {durchlaeufe = durchlaeufe * -1;}
- // Endscheide Rotationsrichtung
- // Modus eins: wenn durchlaeufe kleiner als 180°
- // Modus zwei: wenn durchlaeufe größer als 180°
- if (durchlaeufe < 180) {rotation = "eins";}
- else {rotation = "zwei";}
- // Wenn Winkel des aufrufenden Objektes zum Zielobjekt innerhalb der Drehgeschwindigkeits-Toleranz,
- // setze Drehung mit image_angle
- if (durchlaeufe>drehgeschwindigkeit)
- {
- // Rotationsmodus: one.
- if (rotation=="eins")
- {
- if (image_angle>end_angle) {image_angle = image_angle - drehgeschwindigkeit;}
- if (image_angle<end_angle) {image_angle = image_angle + drehgeschwindigkeit;}
- }
- // Rotationsmodus: two.
- if (rotation=="zwei")
- {
- if (image_angle<end_angle) {image_angle = image_angle - drehgeschwindigkeit;}
- if (image_angle>end_angle) {image_angle = image_angle + drehgeschwindigkeit;}
- }
- }
- else
- {
- image_angle = point_direction(x,y,objekt_relativ_x,objekt_relativ_y);
- }
- }
- }
Viel Spaß damit
Bevor ich nicht ganz sicher bin, sage ich lieber gar nichts. 
