Texte / VHVSTValles hoffnunslos verschrobene Script Tutorials Teil I: Parallax Wie ihr vielleicht wisst, arbeite ich jetzt seit über einem Jahr an Vampire Hunt, wobei ich immer wieder auf mit völlig unbekannte Scriptfunktionen und Möglichkeiten treffe, wenn ich was neues ausprobiere. Eines der meiner Meinung nach nützlichsten Dinge sind Parallaxe Objekte. Dinge wie Himmelskörper, Statusanzeigen, ect, können seit GWE4 ohne lästige Aufrufe wie SetPosition() oder Attachs an den ausgewählten Clonk bequem umgesetzt werden. Dieses leicht verworrene Tutorial befasst sich mit Parallaxen Objekten im Allgemeinen, was für Anfänger interresant sein sollte, und mit dem Scripten von sich bewegenden Himmelskörpern, worauf man auch als erfahrener Scripter einen kleinen Blick werfen könnte ;-) 1.Ein Tutorial zum Erstellen von Hintergrund/HUD-Objekten. Was ist denn überhaupt ein Parallaxes Objekt? Parallaxe Objekte sind Objekte mit der Kategorie C4D_Parallax. Ihre Position ist nicht wie gewöhnlich relativ zur oberen linken Kartenecke, sondern zur linken oberen Bildschirmecke. Das Bedeutet, ein normales Objekt mit Position (200/200) ist 200 Pixel rechts von und 200 Pixel unter der oberen linken Ecke der Karte. Bei einem Parallaxen Objekt bedeutet der Abstand 200 Pixel von der oberen linken Bildschirmecke, egal wo diese sich gerade befindet. Das ist ein wichtiger Unterschied, denn egal auf welcher Position der Clonk des Spielers sich befindet, der Bilschirm "folgt" ihm, und damit auch die parallaxen Objekte. Ein parallaxes Objekt kann demnach nie außer Sicht geraten, aus der Karte geschleudert oder eingesammelt werden. Und wie mache ich das jetzt? Das ist der einfachere Teil ;-) Zunächst muss die Kategorie C4D_Parallax für das Objekt gesetzt werden. Seit neuestem kann man die Kategorien in der Defcore auch in Worten angeben, das sieht dann z.B. so aus: Category = C4D_StaticBack | C4DParallax Alternativ kann man auch in der Entwicklerdoku unter Objektkategorien durch Anklicken der gewünschten Kategorien die richtige Zahl ausgeben lassen. Danach sind im Prinzip nur noch drei Zeilen Script nötig. Local(0)=0; Local(1)=0; SetPosition(x,y); Warum man Local 0 und 1 setzen muss, erkläre ich jetzt nicht, das würde zu weit ausschweifen, wers genau wissen will soll in der Doku unter C4D_Parallax schauen. Die Position des Objekts ist jetzt der gewünschte Abstand von der linken oberen Bilschirmecke. Durch etwas Probieren kann man das Objekt jetzt irgendwie unter das Clonkporträt lotsen, und da hängt es nun, gut sichtbar für alle Spieler auf ihren Bildschirmen. Und was soll das jetzt bringen? Es gibt natürlich eine Menge verwendungen für diese Art von Objekt. Die einfachste sind Wertanzeigen. Dazu muss man zusätzlich den Besitzer des Objekts und seine Sichtbarkeit verändern. Beispiel: SetOwner(0); SetVisibility(VIS_Owner()); Dieser Script sorgt dafür dass das Objekt dem ersten Spieler gehört und nur von diesem Gesehen werden kann. Denn was hilft es, wenn andere Spieler eine Statusanzeige sehen, die gar nichts mit ihrem Clonk zu tun hat? Zusätzlich sollte das Objekt die Kategorie C4D_IgnoreFoW bekommen, damit man es auch sieht wenn der Fog of War aktiviert ist und es grade nicht im Sichtfeld liegt. Eine Andere Verwendung sind Hintergründe. Man nehme einfach ein Bild von einer Berglandschaft, das so groß ist wie das Spielfester von Clonk (der genaue Wert ist mir leider unbekannt) mache es parallax und schon sehen alle Spieler unabhängig von dieser Position auf der Karte im Hintergrund Berge. Dazu empfiehlt sich die Kategorie C4D_Background, da das Objekt sich sonst böse mit Gebäuden und ähnlichem beißen würde. zu Beachten: 1.Parallaxe Objekte können einige Positionbezogenen Scriptbefehle nicht umsetzen, z.B -CreateObject() -FindObject() ,zumindest nicht mit Suchbereich 2.bei negativen Positionswerten bezieht sich die Position auf die untere rechte Bildschirmecke. 2.Mathematik + Clonk: Parallaxe Himmelskörper Mit C4D_Parallax kann man natürlich auch ganz genial Dinge wie Sonne und Mond umsetzen. An dieser Stelle lasse ich einfach einen Script von mir für mich sprechen, den ihr im Endrelease von Vampire Hunt finden werdet ^^ Der Screenshot erklärt einige der Variablen. /*-- Mond --*/ #strict func Initialize() { SetAction("Loom"); //Parallax machen Local(0)=0; Local(1)=0; } func Wander() //Timer Call { /* Moon Phase ist eine Local die von TIME jede Nacht geändert wird. Das Objekt hat eine Aktion mit 10 Phasen, die Neumond bis Vollmond darstellen. preiset den großen Graphikmeister Speed ;-) */ SetPhase(MoonPhase); /* Wir wollen eine langgezogene Kreisbewegung, deren obere Hälfte im Bildschirm liegt, diese soll nachts ablaufen, also von TimeResolution()/4 bis TimeResolution()*3/4 */ var time = FindObject(TIME); var tRm= time -> TimeResolution(); //Siehe Script von TIME, = "maximale" Tageszeit var tR= time -> ActualDayTime()-tRm/4;//Tageszeit var ScreenResX = 600; //Geratene Werte, Bildchirmauflösung von Clonk var ScreenResY = 300*2; //y doppelt, damit man nur die obere Hälfte sieht var alpha = (tR*360)/tRm; //Verhältnis von tR zu tRm in form eines Winkels var xp = Cos(alpha,ScreenResX/2); var yp = Sin(alpha,ScreenResY/2); var x = ScreenResX-xp; var y = ScreenResY-yp; SetPosition(x,y); return(1); } func Switch() { //Loom Back = Loom mit Reverse. nicht weiter wichtig. if(GetAction() eq "Loom") SetAction("LoomBack"); else SetAction("Loom"); return(1); } Dieser Script hat mich ca 4 Stunden und 3 Wutanfälle gekostet =.= ... und das war der einzige Nutzen den Mathematik bisher für mich hatte. Zum besseren Verständnis empfehle ich Eisbeutel und die Entwicklerdoku. Ich hoffe VHVST hilft den Scriptern unter euch weiter, immerhin lebt Clonk praktisch von seiner Community (= Bis zum nächsten mal, Valle 13 Kommentare |
aber ja danke für das tutorial ich hab schon ein wenig probiert o0
Zuletzt geändert: 31.03.2008 11:05
Ich benutz ein eigenes TIME.
Grafik mit f bitte :C
Zuletzt geändert: 31.03.2008 09:10
@ Cäsar
Findest du? Ich wollte halt was griffiges schreiben, mit dem Anfänger auch
was anfangen können.
Wem ein gutes Thema einfällt, das ner Erklärung/Anleitung bedarf, her damit, ich glaube
schlau daherlabern liegt mir ^^
darstellen. preiset den großen Graphikmeister Speed ;-)
pwned by speed ;)
ich hab einen mit 30 phasen der ist noch kuhler!!
Zuletzt geändert: 28.03.2008 19:37
Und der Mond Script... Naja, das ist eher eine Sonne, ein Mond steht nämlich auchmal Tagsüber am Himmel.