Hallo erstmal
.
ACHTUNG!Dieses Tutorial ist mein erstes.Ich werde es noch mehrmals überarbeiten müssen,damit es besser verständlich ist.Rückmeldungen, was ich verbessern sollte, sind erwünscht.
Schwierigkeit
In diesem Tutorial erkläre ich euch, wie man
so einen Kreis, mittels Sinus und Cosinus, in die Landschaft zeichnet.Wer sich für Sinus und Cosinus interessiert und fit in Mathematik ist sollte den
Wikipedia-Artikel lesen.Für alle anderen erkläre ich kurz was die "Funktionen" Sinus und Cosinus machen.
Als erstes zu den Argumenten die "Sin" und "Cos" brauchen,die Argumente sind bei beiden gleich.Das erste Argument "iAngel" gibt einen Winkel an,das zweite "iRadius" die Größe eines Kreisradius(das ist die Hälfte vom Durchmesser eines Kreises).Anhand dieser Argumente wird eine Zahl berechnet,wie zeigt
dieser Graph.Obenlinks sehen wir den Winkel,links Sinus und unten Cosinus."Sin" und "Cos" berechnen nun aus dem Winkel die am Rand angezeigte Zahl.Bei 90°Grad gibt "Sin" also 1 und "Cos" 0 aus, bei 0°Grad ist es umgekehrt.Diese Zahl wird dann mit dem zweiten Argument multipliziert und das Ergebnis dann zurückgegeben.
Was bringt das überhaupt?
Mit Sin und Cos kann man Kreise erstellen.Denn die beiden Funktionen liefern einen anährenden Kreis wenn man sie für ganz viele Winkel berechnet.
So jetzt wissen wir wie Sin und Cos funktionieren und können damit einen Kreis erstellen.
Als erstes brauchen wir einen Funktionskopf:
- Zitat :
- global func DigFreeCircle(int iX,int iY,int iXRadius,int iYRadius,int iCircleLenght,int iPixel)
Das "
global" zeigt,dass der Script überall verfügbar ist, genauso wie die normalen Funktionen z.B. "
CreateObject"."
func" steht für Funktion.In den Klammern stehen die Argumente,das
int vor allen Argumenten zeigt das es alles "Integer" also Ganzzahlen sind,das 'i' kennzeichnet die einzelnen Argumente nochmals als Ganzzahl um die Übersicht zu verbessern.
- Zitat :
- {
var iSin,iCos;
for(var ih; ih < iCircleLenght;ih++)
{
Erstellt drei (noch) leere Behälter,mit den Namen "iSin","iCos" und "ih".Wie wir (hoffentlich
)gelernt haben steht das 'i' für eine Ganzzahl.Ausserdem startet eine "
for" Schleife,die solange durchlaufen wird wie "ih" kleiner ist als iCircleLenght.Die Aufgabe der Schleife ist es, in einzelnen Stücken einen Kreis in die Landschaft zu graben."ICircleLenght" gibt dabei die Größe des Kreises in einem Winkel an,360 wäre ein ganzer Kreis,180 ein halber,90 ein viertel etc.
- Zitat :
- iSin = Sin(ih,iXRadius);
iCos = Cos(ih,iYRadius);
Weißt den Behältern "iSin" und "iCos" einen Wert zu."iSin" bekommt dabei den 'X' Wert eines Punktes auf der Kreisbahn und "iCos" den dazugehörenden 'Y' Wert.
- Zitat :
- DigFreeRect((iX+iSin),(iY+iCos),iPixel,iPixel);
}
}
Die eigentliche Funktion.
DigFreeRect gräbt eine bestimmte Position frei.Das erste und zweite Argument geben die Position an wo etwas freigegraben werden soll.Wir haben dort, die gespeicherte Position der Kreisbahn in "iSin" und "iCos" + der Position von der linken, oberen Kartenecke in "iX" und "iY" eingesetzt.Der dritte und vierte Parameter geben die Seitenlängen des freigegrabenen Recktecks an.Dort haben wir "iPixel" eingesetzt.
Nochmal der gesamte Code:
- Zitat :
- global func DigFreeCircle(int iX,int iY,int iXRadius,int iYRadius,int iCircleLenght,int iPixel)
{
var iSin,iCos;
for(var ih; ih < iCircleLenght;ih++)
{
iSin = Sin(ih,iXRadius);
iCos = Cos(ih,iYRadius);
DigFreeRect((iX+iSin),(iY+iCos),iPixel,iPixel);
}
}