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

Austausch | 
 

 Kanone mit Zielfunktion

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

Männlich Alter : 24
Anmeldedatum : 21.12.08

BeitragThema: Kanone mit Zielfunktion   Fr Jul 16, 2010 8:59 pm

Schwierigkeit:***

Vorwissen: ActMap, DefCore, einige Befehle,Variablen, if und den == Operator


Man braucht doch einige Befehle und auch die ActMap findet Verwendung

Ok, dann fangen wir mal an eine schöne Kanone zu machen. Alle sollten die Kanone kennen die unter Objects.c4d steht. Man kann zielen und Zeug abschießen. Wer sich den Skript anguckt denkt sich: "Uff, WTF?"

Das will ich nun ändern. Ich erwarte das ihr mitdenkt deshalb erst immer ein Teil und im nachhinein die Erklärung, dann merkt ihr es euch besser(hoff ich mal)
Wir erstellen also die Kanone und brauchen erstmal eine Grafik:


So, die hätten wir. Unter Vorwissen steht DefCore und dafür gibt es ein Tut schon hier, daher nehm ich euch mal die Arbeit ab:
DefCore
Code:

[DefCore]
id=KUKA
Name=Kanone
Version=4,9,5
Category=C4D_Structure
MaxUserSelect=3
Width=60
Height=70
Offset=-30,-40
Picture=0,0,60,70
Vertices=2
VertexX=1,1
VertexY=30,-16
VertexFriction=100,100
Value=85
Mass=1000
Components=METL=3;
Grab=2
Kurz zusammengefasst: Gebäude, kann angefasst werden, hat einen Wert von 85, und besteht aus 3 Metall.

ActMap sollte man auch schon können aber fasse es natürlich kurz zusammen:
ActMap
Code:

[Action]
Name=Aim
Procedure=NONE
Directions=2
FlipDir=1
Length=5
Facet=0,0,60,70
NextAction=Hold
Aktion heißt Aim, kann auch horizontal gespiegelt dargestellt werden, Länge von 5 Bildern, Größe eines Bildes:0,0,60,70 und die Aktion soll beibehalten werden.





So, jetzt haben wir Grafik, DefCore und ActMap, da fehlt ja noch der Skript, und zu dem kommen wir jetzt.
Script
Code:

#strict 2


func Initialize()
{
SetAction("Aim");
//Etwas Startmunition reicht fürs erste
CreateContents(KUWI,this,20);

   return 1;
}

So Initialize bedeutet schonmal sobald das Objekt erstellt wird, die Aktion setzen wir auf "Aim", dass ist die aus der ActMap und geben der Kanone mal Anfangsmunition. 20 mal ein KUWI in thises/diesem Objekt. Soweit sollte alles klar sein, jetzt wird gleich noch einfacher:

Code:
//Richtung anpassen
protected func ControlLeft()
{
SetDir(DIR_Left);
}

protected func ControlRight()
{
SetDir(DIR_Right);
}
Muss ich das wirklich erklären? Drückt man recht, sieht die Kanone auch nach rechts und umgekehrt. Mit bisschen Englisch-Kenntnissen ganz simpel. Machen wir weiter, und kommen zum nachladen:

Code:
//Munition nachladen
protected func ControlThrow(pClonk)
{
//Wenn wir Invenarinhalt finden
var pBullet=FindContents(KUWI,pClonk);

//packen wir es rein
Enter(this,pBullet);
}

pClonk ist der ausführende Clonk, pBullet ist eine Variable, die den Inhalt des ausführenden Clonks nach KUWI absucht. Und wenn jetzt ControlThrow gedrückt wird, dann wird etwas von irgendwas anderem betreten(Enter). Und zwar betritt etwas thises Objekt und zwar pBullet. Und das ist ja unserer KUWI-Inhalt des Clonks. Kurzgefasst: Der Kuwi-Inhalt des Clonks wandert in die Kanone.

An dieser Stelle: Sorry, Leute ich bin ein Mensch ders gern bequem hat^^ Aus dem Grund habe ich mir einen neuen Befehl erstellt und zwar:

BulletBillShot(int iXPosition, int iYPosition,int iXDir, int iYDir);

Das heißt in diesem Skript steht euch ab sofort dieser Befehl zur Verfügung. Erste 2 Parameter sind die Austrittsposition und die letzen 2 sind die Geschwindigkeit. Das besondere an der Position: Sie muss immer Positiv angegeben werden, denn sie passt sich automatisch der Richtung an! Praktisch, nicht? Kann also 30 Pixel nach Links oder Rechts sein, je nach Richtung der Kanone.
Desweiteren übernimmt die Funktion das überprüfen nach Munition, und entfernen dieser, wenn abgeschossen wird. Vieles auf einmal, so hat man später eine bessere Übersicht, ihr seht später noch wieso Wink
Falls Wunsch besteht, kann ich auf die Funktion ja noch näher drauf eingehen.
Damit ihr den Befehl nutzen könnt, kopiert das hier in euer Skript:
Spoiler:
 

Ok, nach diesem gemeinem Teil kehren wir zurück zum Ursprünglichen. Wir wollen ja eine Kanone zum Schießen bewegen. Diesmal beziegen wir wieder die ActMap mit ein, je nach Bild soll ja die Munition(ihr wisst eh was es ist, jetzt da ihr meine eigene Funktion gesehen habt^^) Aber bevor wir zum schießen kommen, zuerst noch die Zielfunktion(en):

Code:

//Kanone hoch und Runter bewegen
protected func ControlUp()
{
SetPhase(GetPhase() 1,this);
}

protected func ControlDown()
{
SetPhase(GetPhase()-1,this);
}
So, was passiert denn schönes? pClonk ist wieder der Graben-drückende
Clonk. Und nun kommt GetPhase() - doch was heißt das? GetPhase ist eher selten im
Gebrauch. Der Befehlt gibt zurück welches Bild im Moment gezeichnet
wurde, besser gesagt, welche Lenght(siehe Actmap) im Moment die Kanone
hat. Was zurückgegeben wird, ist eine Zahl. Wir haben jetzt ControlUp(oben) und Down(unten)jeweil mit 1 und -1. Drücken wir nach oben, rutscht das Bild der Kanone 1 weiter. In der Graphics.png also das zweite Bild. Bei ControlDown geht es dann wieder -1 zurück. Simpel, oder?

Damit ändern wir die Grafik der Kanone und können exakt nachfragen, welches Bild sie grade hat. Abhängig davon machen wir die Schussfunktion. Richtig, d.h. nun, worauf alle gewartet haben; Die Funktion zum schießen!
Code:

//Feuer Frei!
protected func ControlDig(pClonk)
{
if(GetPhase(this)==0)
    BulletBillShot(30,4,70,-5);
   
if(GetPhase(this)==1)
    BulletBillShot(30,-4,80,-10);
   
if(GetPhase(this)==2)
    BulletBillShot(27,-10,80,-20);

if(GetPhase(this)==3)
    BulletBillShot(20,-20,88,-35);
   
if(GetPhase(this)==4)
    BulletBillShot(18,-28,95,-55);   
   
if(GetPhase(this)==5)
    BulletBillShot(16,-30,80,-65);   
   
}


GetPhase() kennt ihr ja. == stellt einen Vergleich da. Das heißt :

Code:
if(GetPhase(this)==0)

bedeutet, dass wenn das Bild der Animation von thisem Objekt gleich 0 ist - entspricht dem ersten, Clonk zählt von 0 beginnend - dann Schießen wir einen KUWI - mithilfe unserer neuen, seltst erstellten Funktion - von der Position 30,4 ab und geben ihm eine Geschwindigkeit von 70 seitlich und -5 nach oben.

Das wiederholen wir für alle Bilder also bis Bild nummero 5 (entspricht dme 6.) , Austrittsposition und Geschw. sind ja dementsprechend anders.
Und wenn wir das haben, wäre das alles. Ein fertiges Skript wird hier nicht angeboten, sonst skrollt ihr ja nur runter und kopiert Razz

Soweit zu Bowserkoopas erstem Tutorial
Nach oben Nach unten
Benutzerprofil anzeigen
Pitri
Feldmarschall
Feldmarschall
avatar

Männlich Alter : 24
Ort : Karlsruhe
Anmeldedatum : 02.03.09

BeitragThema: Re: Kanone mit Zielfunktion   Sa Jul 17, 2010 2:38 am

Ein wirklich sehr schönes tutorial! Ich glaube, anfänger haben damit keine probleme! Very Happy
Nach oben Nach unten
Benutzerprofil anzeigen http://www.clonk-fanpage.lima-city.de
Bowserkoopa
Staatsrat
Staatsrat
avatar

Männlich Alter : 24
Anmeldedatum : 21.12.08

BeitragThema: Re: Kanone mit Zielfunktion   Sa Jul 17, 2010 10:50 am

Ich hätts für schwerer eingeschätzt weil ich ja dann später auf einen eigenen Befehl ausgewichen bin um möglichst vieles auf einmal erledigen zu können, aber dafür kommts der Übersichtlichkeit zugute^^
Nach oben Nach unten
Benutzerprofil anzeigen
Stephan Borgs
Kadett
Kadett
avatar

Männlich Alter : 23
Ort : Duisburg Meiderich
Anmeldedatum : 09.03.10

BeitragThema: Re: Kanone mit Zielfunktion   So Aug 08, 2010 11:33 pm

Geiles tut, ich war lange nicht on, aber durch dieses tut bin ich wieder in die welt des Scriptens eingetaucht.

Einfach zu verstehen und sehr nützlich.

PERFEKT
Nach oben Nach unten
Benutzerprofil anzeigen
Gesponserte Inhalte




BeitragThema: Re: Kanone mit Zielfunktion   

Nach oben Nach unten
 
Kanone mit Zielfunktion
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1

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