Hier mal eine Variante für die Positionierung des View relativ zu einer Spielfigur.
Mit dieser könnt ihr bestimmen wie schnell der View seine Grundposition gegenüber der Spielfigur einnehmen soll. ob sofort, schnell bis ganz träge.
Den unten geschriebenen Code schmeißt ihr in ein unsichtbares, unsolides Objekt und platziert das dann innerhalb eures Raumes.
Es bietet sich an, das Objekt gleich persistent zu machen. Vergeßt nicht im Raum das Object follwoing zu deaktivieren, sonst geht es nicht
Um so träger sich der Bildschirm der Figur hinterherbewegen soll, desto höher muß auch die Schrittanzahl gewählt werden.
Momentan hat der Code noch einen kleinen Fehler. Wenn man an den Rand des Raumes kommt, ist die Ansicht nicht ganz korrekt. Daß heißt aber nur, daß der Vektor zum linken oberen Punkt nicht ganz korrekt ist, was in den meisten Fällen nicht stören sollte und wahrscheinlich nicht einmal auffällt. Das Errechnen der richtigen Punktes is och wieder ne etwas fiesere Mathematik.
in den CreateEvent
In den DrawEvent:
Alles anzeigen
Als Beispiel die Rohfassung meines JumpNRun-Codes mit einem Dummy als Spielfigur.
links/rechts/hoch/runter = Bewegung
Shift + links/rechts = rennen
Strg + links/rechts = schleichen
Alt + links/rechts = kriechen
Runter + links/rechts = rollen
Return + links/rechts/hoch/runter = Umherschauen
Runter = Hocken
hoch = springen / klettern
Viel Spaß
Archiv ist zweigeteilt
Mit dieser könnt ihr bestimmen wie schnell der View seine Grundposition gegenüber der Spielfigur einnehmen soll. ob sofort, schnell bis ganz träge.
Den unten geschriebenen Code schmeißt ihr in ein unsichtbares, unsolides Objekt und platziert das dann innerhalb eures Raumes.
Es bietet sich an, das Objekt gleich persistent zu machen. Vergeßt nicht im Raum das Object follwoing zu deaktivieren, sonst geht es nicht
Um so träger sich der Bildschirm der Figur hinterherbewegen soll, desto höher muß auch die Schrittanzahl gewählt werden.
Momentan hat der Code noch einen kleinen Fehler. Wenn man an den Rand des Raumes kommt, ist die Ansicht nicht ganz korrekt. Daß heißt aber nur, daß der Vektor zum linken oberen Punkt nicht ganz korrekt ist, was in den meisten Fällen nicht stören sollte und wahrscheinlich nicht einmal auffällt. Das Errechnen der richtigen Punktes is och wieder ne etwas fiesere Mathematik.
in den CreateEvent
GML-Quellcode
- Centerobjekt = character;
- schritte = 20; // Roomspeed: 40 schritte:45
- x_rel_center = 0; // relativ horizontal von der Mitte des Bildschirmes (0 ist Mitte)
- y_rel_center = 0; // relativ vertical von der Mitte des Bildschirmes (0 ist Mitte)
- // Qualifizierung
- if (x_rel_center>view_wview/2) {x_rel_center=view_wview/2;}
- if (y_rel_center>view_hview/2) {y_rel_center=view_hview/2;}
In den DrawEvent:
GML-Quellcode
- pos_x2 = view_xview[view_current]; // aktueller Bildschirmpunkt links oben X-Koordinate
- pos_y2 = view_yview[view_current]; // aktueller Bildschirmpunkt links oben Y-Koordinate
- cent_x = Centerobjekt.x - view_wview/2 + x_rel_center; // Neuer Bildschirmpunkt links oben X-Koordinate
- cent_y = Centerobjekt.y - view_hview/2 + y_rel_center; // Neuer Bildschirmpunkt links oben X-Koordinate
- // Ansicht innerhalb des Raumes halten
- if (cent_x<0) {cent_x = 0;}
- if (cent_x>room_width-view_wview[view_current]) {cent_x = room_width-view_wview[view_current];}
- if (cent_y<-Centerobjekt.sprite_height) {cent_y = -Centerobjekt.sprite_height;}
- if (cent_y>room_height-view_hview[view_current]){cent_y = room_height-view_hview[view_current];}
- /*
- * A Neuer Punkt Sternchenlinie ist die, auf der sich
- * |\* der l.o. Punkt der Ansicht bewegen muß.
- * | \ * Neuer zu aktuellem Punkt B ----> A
- * | \ *
- * | \ *
- * | \ *
- * +-----\---------------B Aktueller Punkt
- * \
- * O Centerobjekt
- *
- */
- new_angle = point_direction(cent_x,cent_y,pos_x2,pos_y2); // Winkel zwischen neuem Bildschirmpunkt und aktuellem
- new_abstand = point_distance(cent_x,cent_y,pos_x2,pos_y2); // Abstand zwischen neuem Bildschirmpunkt und aktuellem
- // Verschieben des Views
- view_xview[view_current] -= lengthdir_x(new_abstand,new_angle) / schritte;
- view_yview[view_current] -= lengthdir_y(new_abstand,new_angle) / schritte;
Als Beispiel die Rohfassung meines JumpNRun-Codes mit einem Dummy als Spielfigur.
links/rechts/hoch/runter = Bewegung
Shift + links/rechts = rennen
Strg + links/rechts = schleichen
Alt + links/rechts = kriechen
Runter + links/rechts = rollen
Return + links/rechts/hoch/runter = Umherschauen
Runter = Hocken
hoch = springen / klettern
Viel Spaß
Archiv ist zweigeteilt
Bevor ich nicht ganz sicher bin, sage ich lieber gar nichts.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von vereiser ()