Ein Forum, in dem sich neue Clonk Entwickler untereinander austauschen können.
 
StartseiteStartseite  PortalPortal  FAQFAQ  SuchenSuchen  AnmeldenAnmelden  MitgliederMitglieder  LoginLogin  

Austausch | 
 

 Spezielle Laufen-Animationen einfach einbinden

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten 
AutorNachricht
Gamer
Staatsrat
Staatsrat
avatar

Männlich Alter : 22
Ort : In einem kleinen Dorf in Unterfranken (Bayern)
Anmeldedatum : 10.02.09

BeitragThema: Spezielle Laufen-Animationen einfach einbinden   Di Sep 06, 2011 6:57 pm


Vorrausetzungen: Eine mit Blenderclonk gerenderte Graphics.png & dazugehörige ActMap.txt, eine extra Lauf-Animation in der Graphics.png.
Schwierigkeit: *****
Hallo!

.. und herzlich willkommen bei meinem neuen Tutorial. Ja, nach etwas längerer Inaktivität mach hier doch noch etwas. Und jetzt, wo ich wieder aktiver bin, gibts auch ein paar neue Tutorials von mir. Fangen wir gleich mit einem hilfreichen Trick an!


Das Ziel

Ziel dieses Tutorials ist es, aus einer Graphics.png eines Clonkes, das extra eine neue Laufen-Animation hat (z.B für eine Waffe) einzubinden.
In diesem Tutorial werde ich es anhand einer Bogen-Lauf-Animation vorführen.


Vorbereitung
Das ist die Grafik des Clonkes mit der Extra-Animation:

Die letzte Animation stellt hier die neue Bogen-Lauf Animation dar.

Die ActMap.txt darf natürlich auch nicht fehlen. Hier ist ein kleiner Auschnitt davon:
ActMap.txt schrieb:
[Action]
Name=Walk
Length=16
Facet=0,0,16,20

....

[Action]
Name=WalkBow
Length=16
Facet=0,320,24,20
Lasst euch von den verschiedenen Größen in diesem Moment nicht verwirren.

Nun wird diese Graphics.png samt ihrer ActMap.txt (und natürlich auch Overlay.png) zu einem Clonk zusammengeformt, wie ich bereits in diesem Tutorial aufgeführt habe.
Kurzfassung:

  • Vorlagen-Clonk kopieren und umbennen(Hier z.B der Ritter)
  • Graphics.png und Overlay.png reinkopieren
  • DefCore ändern (ID etc.)
  • Die Facet Koordinaten der ActMap.txt des Vorlagen-Clonks mit dem aus der mitgerenderten ActMap.txt abgleichen
  • Script auf "#include 'ID des Vorlage-Clonks einfügen'" ändern


Nun, da wir jetzt den Basis Clonk aufgebaut haben, können wir ihn um die neue Animation erweitern.


Animation einbauen

1. Die ActMap.txt

Zuerst erweitern wir die ActMap um die Bogen-Lauf Animation.
Dazu kopieren wir uns einmal die Action "Walk" und setzen bei Facet nun die neuen Koordinaten der neuen Lauf Animation ein.
Name und eventuell die Bilderanzahl (Length) ändern, fertig.
So sehen die beiden Actions jetzt ungefähr aus:

ActMap2 schrieb:
[Action]
Name=Walk
Procedure=WALK
Directions=2
FlipDir=1
Length=16
Delay=15
Facet=0,0,16,20
NextAction=Walk
StartCall=None
InLiquidAction=Swim

[Action]
Name=BogenWalk
Procedure=WALK
Directions=2
FlipDir=1
Length=16
Delay=15
Facet=0,320,24,20,-4
NextAction=BogenWalk
StartCall=None
InLiquidAction=Swim
Die Koordinaten können natürlich bei euch varrieren. (PS: Das "-4" wurde eingefügt, weil die Animation statt 16px 24 px breit war. Wenn man die Animation wechseln wird, wird der Clonk dann um ein paar Pixel verschoben; Das wird hiermit behoben)

Damit wir gleich fließend zu dem Script übergehen können, arbeiten wir noch einige Funktionen in die Action mit ein.
Dies ist nur eine Möglichkeit, das zu realisieren. Ich nehme die hier, weil sie am wenigsten Aufwand bedeutet und ich überzeugt bin, dass sie auch am einfachsten zu verstehen ist.

In dieser Version werden wir die Funktionalität "PhaseCall=Funktion" benutzen, damit bei jedem Bilderwechsel in der Animation eine Funktion aufgerufen wird. Diese Funktion (hier: "CheckBow") wird überprüfen, ob wir einen Bogen im Inventar haben und dementsprechend uns in die andere Walk Animation versetzen.

Also erweitern wir noch einmal die ActMap dementsprechend:
ActMap_final schrieb:
[Action]
Name=Walk
Procedure=WALK
Directions=2
FlipDir=1
Length=16
Delay=15
Facet=0,0,16,20
NextAction=Walk
StartCall=None
PhaseCall=CheckBow
InLiquidAction=Swim

...

[Action]
Name=BogenWalk
Procedure=WALK
Directions=2
FlipDir=1
Length=16
Delay=15
Facet=0,320,24,20,-4
NextAction=BogenWalk
StartCall=None
PhaseCall=CheckBow
InLiquidAction=Swim

Das waren auch schon die Vorkehrungen, die wir in der ActMap treffen müssen.


2. Der Script

Führen wir unser Ziel und unser bisherig Getanes nochmal kurz zu Gemüte:
Wir haben die Walk Animation, die Standart Walk Animation, die bei jedem Bilderwechsel die Funktion "CheckBow" aufruft.
Unsere eigene Bogen-Laufen-Animation führt ebenfalls die gleiche Funktion aus.

Ziel des Scriptes ist es also nun zu schauen, wenn der Clonk gerade die Animation "Walk" (also die normale Lauf Animation) ausführt und gerade einen Bogen im Inventar hat, dass es nahtlos in die Bogen-Laufen-Animation wechselt. Andersrum muss das Script es auch schaffen, dass wenn wir gerade die Bogen-Laufen Animation haben und der Bogen nicht mehr im Inventar ist, den Clonk wieder die normale Laufanimation zu geben.

Folgender Script dazu, der gleich erklärt wird:

Zitat :
#strict 2
#include KNIG

func CheckBow(){

if(FindContents(BOW1) && GetAction() == "Walk")
{
var phase=GetPhase();
SetAction("BogenWalk");
SetPhase(phase);
return 1;
}

if(!FindContents(BOW1) && GetAction() == "BogenWalk")
{
var phase=GetPhase();
SetAction("Walk");
SetPhase(phase);
return 1;
}
return 1;
}
Knapp 22 Zeilen an C4Script reicht schon, um die neue Laufen-Animation einbindet .
Was es im Detail tut werden wir jetzt sehen.

Es beginnt damit, dass die Animation Walk oder BogenWalk diese Funktion aufruft.
Zitat :
func CheckBow(){
Danach wird überprüft, ob wir in dem Inventar der Clonkes einen Bogen haben UND aber noch die normale Laufen-Animation haben.
Zitat :
if(FindContents(BOW1) && GetAction() == "Walk")
Dass wir mit überprüfen ob die noch die normale Lauf-Animation haben ist deshalb wichtig, weil wir sonst gar nicht wissen, ob wir die neue Bogen-Lauf Animation bereits haben. Das führt sonst zu ständigem Animationswechsel.

Die nächsten 6 Zeilen speichern dann die Nummer des Bildes, in der sich die Animation gerade befindet. Als nächstes setzen wir unsere neue Animation "BogenWalk" und setzen das Anfangsbild zu der Bildnummer, die wir vorher hatten. Das MUSS man nicht tun, ist aber ein geschmeidigerer Wechsel der Animation. Wenn man sich vorstellt, dass man gerade mitten in der Animation Walk den Bogen aufnimmt (Arme befinden sich z.B am Körper) und es würde nur die Aktion gesetzt werden, springt es wieder auf das Anfangsbild der Bogen Lauf Animation zurück, wo das Anfangsbild natürlich nicht mit unserem vorherigen übereinstimmt (z.B Arme weggestreckt vom Körper).

Danach wird die Funktion beendet.
Zitat :
{
var phase=GetPhase();
SetAction("BogenWalk");
SetPhase(phase);
return 1;
}
Der 2te Teil der Funktion kümmert sich um den umgekehrten Fall. Diesmal wird dem Clonk wieder die normale Lauf-Animation verpasst wenn er KEINEN Bogen mehr im Inventar hat aber DENNOCH die Bogen-Lauf-Animation hat.
Zitat :

if(!FindContents(BOW1) && GetAction() == "BogenWalk")
{
var phase=GetPhase();
SetAction("Walk");
SetPhase(phase);
return 1;
}

Der Rest der Funktion besteht dann nur noch aus dem Beenden der Funktion und der schließenden Funktionsklammer.
Zitat :
return 1;
}


Testen!

Das war schon alles nötige um unserem Clonk, wenn er einen Bogen im Inventar hat, seine eigene Bogen-Lauf Animation zu geben.
Nun können wir bereits das Objekt in ein Testszenario tun, Knighs.c4d aktivieren, ihm einen Bogen geben und Violá!

Es funktioniert perfekt Smile.

Auch wenn man jetzt springt, also die Animation wechselt, und dann wieder läuft, bekommt er die Bogen-Laufen Animation wieder. Und ist der Bogen Weg, ist auch die Animation weg.


Anmerkungen, Downloads und Referenzen
Vieleicht würden sie ja auch zu ihrer speziellen Lauf-Animation die passende Springen-Animation haben. Das lässt sich mit diesem Script oder mit dem ändern der Actions jedoch nicht bezwecken.
Dazu müssen sie schon die ControlUp() Funktion des Clonkes modifizieren, damit sie vorher nochmal abfragen können, ob die Bedingungen für ihre spezielle Walk Animation gegeben sind.

Edit: Was ich außerdem noch anmerken möchte, ist, dass das Benutzen einiger Waffen dann eventuell nicht mehr funktioniert. Beispielsweise kann man während man in diesem Beispiel die BogenWalk Animation hat nicht mit dem Bogen feuern. Der Grund steckt in der "ReadyToFire()" Funktion die im Ritterclonk eingebaut ist. Dabei wird in dieser Funktion überprüft, ob der Clonk die Animation "Walk" oder "Ride" ausführt. Diese Abfrage muss man dann eben um die neue Action erweitern. Wie das funktioniert kann man in dem Testszenario (siehe unten) nachlesen.

Die Links zur Doku sind hier aufgeführt. FindContents(), GetPhase(), SetAction(), SetAction()SetPhase(), ActMap.txt und Renderclonks.de.

Dieses Tutorial empfehle ich sehr noch einmal nachzubauen.
Man kann sich das Archiv mit Graphics.png, Overlay.png und ActMap.txt sowie das fertige Testszenario HIER herunterladen.


Viel Spaß beim selbst Ausprobieren und Testen!


Gamer.

_________________
Star Wars Projekt Homepage: http://sites.google.com/site/clonkprojekte/star-wars

Das Burg Projekt.................................................................... Schaut doch mal im Super-Mario Clonk Editon Forum vorbei!


Zuletzt von Gamer am Do Sep 08, 2011 12:32 pm bearbeitet; insgesamt 1-mal bearbeitet (Grund : Anmerkung über Benutzung von Waffen eingefügt)
Nach oben Nach unten
Benutzerprofil anzeigen http://www.gamer95.npage.de/
Germanator
Fähnrich
Fähnrich
avatar

Männlich Alter : 23
Ort : Kanada
Anmeldedatum : 19.02.09

BeitragThema: Re: Spezielle Laufen-Animationen einfach einbinden   Do Sep 08, 2011 11:13 am

Sehr schickes tut. Werds bald mal ausprobieren Very Happy
Nach oben Nach unten
Benutzerprofil anzeigen
 
Spezielle Laufen-Animationen einfach einbinden
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1
 Ähnliche Themen
-
» newticker in den banner einbinden
» Soundcloud Player einbinden
» Eigene kleine Spiele in's Forum einbinden
» Chat auf Html seite einbinden geht das?
» HTML Seite einbinden(Verlinken )

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
CNDG :: Anfänger :: Tutorials-
Gehe zu: