Lieber Besucher, herzlich willkommen bei: Game Maker Domäne. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Spoiler
- (GML-Einsteiger) Schreibe zu den folgenden Funktionen Ersatzfunktionen in GML.
Funktionsaufrufe innerhalb der Funktionen dürfen dabei nicht benutzt werden (auch von keinen eigenen Funktionen). Build-In Variablen sind ebenfalls nicht erlaubt (hspeed, speed, ...). Es ist nicht notwendig, die Parameter auf ihren Typ hin zu überprüfen.
- abs(x)
- sign(x)
- min(x,y) (2 Parameter reichen)
- max(x,y) (2 Parameter reichen)
- (GML-Fortgeschritter) Schreibe folgende Funktionen in GML. Es gelten alle Regeln aus Aufgabe 1. Die selbstgeschriebenen Funktionen aus Aufgabe 1 dürfen nicht aufgerufen werden. Die angewendeten Prinzipien sollten aber im Hinterkopf behalten werden.
Zusätzlich darf draw_point (bzw. draw_pixel) verwendet werden.
- draw_hline(x1,y1,x2,y2) zeichnet eine gerade, horizonte Linie von (x1,y1) nach (x2,y2). Es soll zuerst überprüft werden, ob die zu zeichnende Linie tatsächlich parallel zur x-Achse ist.
- draw_stairs(x1,y1,x2,y2) zeichnet eine Linie im 45° Winkel von (x1,y1) nach (x2,y2). Auch hier soll eine entsprechende Überprüfung der Parameter stattfinden.
- draw_stairs_flat(x1,y1,x2,y2) ähnlich wie b), nur darf der Winkel der Treppe nun auch weniger als 45° betragen. Wieder soll zuerst überprüft werden, ob die zu zeichnende "Treppe" wirklich flach ist (Tipp: Keine Kommazahlen benutzen!). Es reicht, wenn nur einer der 4 Fälle abgedeckt ist (0-45°, 135°-180°, 180°- 225° bzw. 315°-0°, d.h. nach rechts oben, links oben, links unten, rechts unten).
- (GML-Fortgeschritter bis -Experte) Schreibe eine Ersatzfunktion für draw_line. Es gelten die gleichen Regeln wie in Aufgabe 2. Es ist nicht notwending, dass die Funktion deckungsgleiche Linien mit draw_line zeichnet.
- Schreibe die Funktion mit geeigneten Fallunterscheidungen (Tipp: Aufgabe 2 gibt hierfür einen guten Leitfaden).
- Optimiere deine Funktion bezüglich ihrer Performance. Hierfür ist die Benutzung von den GM-Funktionen aus dem Kapitel "Computing Things" erlaubt. Stelle sicher, dass keine Variablen nach dem Aufrufen der Funktion in der entsprechenden Instanz gespeichert bleiben (Tipp: Debugmodus -> View Local Variables). Nimm als Maßstab die erreichte Fps bei einem Roomspeed von ~9999. Notiere zusätzlich deine Beobachtungen. Beachte dabei allerdings, dass diese eine Schwäche des GMs aufzeigen sollten und keine Allgemeingültigkeit besitzen!
- (GML-Fortgeschritter bis -Experte) Schreibe deine draw_line-Funktion (lieber die aus 3a, sonst gibts evtl- böse Überraschungen!) so um, dass sie die Instanz bewegt, von der aus sie aufgerufen wird (diese sollte eine rechteckige Maske haben). Als Parameter wird eine x- und y-Verschiebung übergeben. Das Script soll die "Linie" dieser Bewegung (von x, y nach x+.., y+...)ablaufen und die Instanz entsprechend verschieben. Sollte ein Wandobjekt im Weg sein, soll die Instanz auf der letzten freien Stelle stehenbleiben. Zusätzlich zu den in Aufgabe 3 beschriebenen Funktionen ist die Benutzung der Funktion place_free erlaubt.
- Schreibe die oben beschriebene Funktion mit dem Namen move_along(hspd,vspd) und entwerfe eine einfache Testumgebung, um ihre Funktionalität zu überprüfen. Hierfür reicht ein einfacher Raum mit solid Wandobjekten und einer Spielerfigur (Tipp: Du kannst als Parameter einfach hspeed und vspeed übergeben, solange du sie nach dem Aufrufen der Funktion auf 0 setzt).
- Erweitere die Funktion so, dass sie einen Spielraum von 1 Pixel erlaubt. Sollte sich die Spielfigur also z.B. auf einer Geraden befinden (Seitenansicht), auf der sich eine 1-Pixel-hohe und - breite Erhebung befindet, soll sie diesen ohne Geschwindigkeitsverlust umgehen bzw. "hochklettern". Es ist dabei zu erwarten, dass die Figur nach dem Überqueren dieser Erhebung sich nicht wieder um den einen Pixel nach unten bewegt, den sie vorher nach oben ausgewichen ist.
- Erweitere deine Testumgebung um Schrägen und beobachte, wie sich deine Spielfigur nun verhält.
- Beschreibe in Worten je eine Situation in einem Spiel, in der das Verhalten aus dem letzten Satz aus Aufgabenteil b (nicht) wünschenswert ist.
- Überlege, wie man die Problematik deiner nicht wünschenswerten Situation aus Aufgabenteil d umgehen könnte.
- (Bonusaufgabe) Erweitere deine draw_line-Funktion so, dass sie draw_line_color entspricht.
Spoiler
![]()
GML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 // context_check() // written by MewX // init variables var map,i,prefix,str,src,res; // create script map map = ds_map_create(); for (i=0;i<100;i+=1) { if (!script_exists(i)) continue; ds_map_add(map,string_lower(script_get_name(i)),i); } // get prefix prefix = ""; while (prefix = "") prefix = get_string("Bitte gib deinen Nickname bzw. das Präfix deiner Skripte ein:","mewx")+"_"; // test abs() res = true; str = "Aufgabe 1#a) abs(x): "; src = ds_map_find_value(map,prefix+"abs"); if (!script_exists(src)) str += "nicht gefunden"; else { for (i=-25;i<25;i+=0.5) res &= (abs(i) == script_execute(src,i)); if (res) str += "OK"; else str += "FEHLER"; } // test sign() res = true; str += "#b) sign(x): "; src = ds_map_find_value(map,prefix+"sign"); if (!script_exists(src)) str += "nicht gefunden"; else { for (i=-25;i<25;i+=0.5) res &= (sign(i) == script_execute(src,i)); if (res) str += "OK"; else str += "FEHLER"; } // test min() res = true; str += "#c) min(x,y): "; src = ds_map_find_value(map,prefix+"min"); if (!script_exists(src)) str += "nicht gefunden"; else { res &= (script_execute(src,0,0) == 0); res &= (script_execute(src,32,2) == 2); res &= (script_execute(src,7,32) == 7); res &= (script_execute(src,-32,-2) == -32); res &= (script_execute(src,32,-2) == -2); res &= (script_execute(src,0,-2) == -2); res &= (script_execute(src,2,0) == 0); res &= (script_execute(src,23.4,79.7) == 23.4); if (res) str += "OK"; else str += "FEHLER"; } // test max() res = true; str += "#d) max(x,y): "; src = ds_map_find_value(map,prefix+"max"); if (!script_exists(src)) str += "nicht gefunden"; else { res &= (script_execute(src,0,0) == 0); res &= (script_execute(src,32,2) == 32); res &= (script_execute(src,7,32) == 32); res &= (script_execute(src,-32,-2) == -2); res &= (script_execute(src,32,-2) == 32); res &= (script_execute(src,0,-2) == 0); res &= (script_execute(src,2,0) == 2); res &= (script_execute(src,23.4,79.7) == 79.7); if (res) str += "OK"; else str += "FEHLER"; } // clean up ds_map_destroy(map); // show result show_message(str);
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
(Tipp: Keine Kommazahlen benutzen!)
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Zitat
Schreibe die Funktion mit geeigneten Fallunterscheidungen
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Was soll das heißen? Was gibt es denn da für Fälle?
Mann darf aber doch alle Operatoren und Statements benutzen oder?
Und ab 3.b auch round, floor, ceil, sin... ?
3. Besteht aus 3 Teilaufgaben?
( Also schreibe draw_line neu, schreibe geeignete fallunterscheidungen (was auch immer das heißen mag) und optimiere deine draw_line - funktion)
Würde es dann reichen, wenn man nur eine optimierte schreibt?
Ja, das weiß ich wohl
Zitat
Das würde wohl 0 Punkte geben. Wenn ich die Zeichen außerdem richtig deute und und du mit dem Sinus arbeiten willst, dann kann ich dir direkt sagen: Das ist nicht optimal.
es war eine generelle Frage! Also braucht man für die 3 2 Scripts? Einmal das mit den Fallunterscheidungen (auch wenn ich nicht erkennen kann, was daran sinnvoll wäre (ich glaube, ich benutze eine andere Methode
(nicht mit sinus
))) und einmal die optimierte Version. Wäre es nicht genügend nur eine (optimierte) Version abzugeben? Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7
Schade
Zitat
(Gilt auch für draw_stairs_flat) Eine Linie, kein Dreieck.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »henrik1235« (31. Juli 2009, 11:45)
(Gilt auch für draw_stairs_flat) Eine Linie, kein Dreieck.draw_stairs(x1,y1,x2,y2) zeichnet eine Linie im 45° Winkel von (x1,y1) nach (x2,y2). Auch hier soll eine entsprechende Überprüfung der Parameter stattfinden.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Superdaniel« (31. Juli 2009, 15:24)
Benutzerinformationen überspringen
Game Maker Version: 8 Pro
Selbsteinschätzung: GML Experte
Aktuelles Projekt: Disordia & Harald
Danksagungen: 7