Math.Cos

Mistraal Scripten 2Ich war die ganze Zeit über nicht zufrieden mit der Methode wie ich die Windströmungen realisiert habe. 16 Tile-Kategorien und 16 Regeln für jedes Sprite das beeinflusst werden soll. Da geht schnell die Übersicht verloren, und wehe wenn etwas nachträglich angepasst werden soll. Außerdem störte es mich extrem, dass ich die benötigten X- und Y-Werte selber auszurechnen und in die einzelnen Regeln einzutragen hatte. Das gesamte Konstrukt war unflexibel und mathematisch schlecht gelöst.

Zuerst einmal machte ich mir Gedanken über die benötigte Formel. Die bisherige hieß ja: Gehe X Schritte nach rechts/links, und X Schritte nach oben/unten. Das brachte ein zusätzliches Problem mit sich. Der geneigte Leser mag das Phänomen in dem einen oder anderen Spiel schon beobachtet haben: Die Spielfigur läuft diagonal schneller als horizontal oder vertikal. Das ist ein unerwünschter Effekt, der auf die Schlamperei des Programmierers zurückgeht.

Ich wollte eine mathematische Formel, in die ich lediglich die Variable der Windbeeinflussung einsetzen musste. Unter welchen Umständen die Spielfigur dann wohin und wie schnell geweht wird, sollte mir die Formel dann selbst ausrechnen. Für horizontal und vertikale Bewegung war die Umsetzung in eine Formel denkbar einfach. So schaut der Sourcecode aus:

// go right
targetSprite.AlterXVelocity((float)Speed/100);

›Speed‹ steht hierbei für meine Variable, die ich andernorts definiere. Geteilt durch Hundert steht hierbei nur weil es doch eigentlich sympathischer ist, eine Zahl zwischen 0 und 100 einzutragen, als eine Kommazahl wie 0,35 oder 0,1748.

// go left
targetSprite.AlterXVelocity((float)-(Math.Cos(63.4)*Speed)/100);
// go up
targetSprite.AlterYVelocity((float)-(Math.Sin(63.4)*Speed)/100);

Das ist die Formel für alle Wind-Tiles, die in einem sehr steilen Winkel strömen. 63.4 ist hierbei der Winkelgrad. Auf den ersten Blick ist er willkürlich gewählt. Bei allen meinen früheren Versionen bin ich von Winkeln mit geraden Zahlen ausgegangen, 30, 45 und 60 Grad. Allerdings waren diese Zahlen es, die willkürlich gewählt waren und mir deshalb beim Erstellen der Grafiken große Probleme bereitet haben. Der Mathematik ist es egal, welche Winkelgrade ich verwenden will. Den Grafiken aber nicht.

Mistraal Grafiken 5a Die Skizze verdeutlicht, dass ich bei der Grafikerstellung für die Windströme sehr genau beachten muss, dass nur bestimmte Winkelgrade Sinn machen. Zuerst war mir das nicht bewusst und ich dachte 30 und 60 Grad wären vollkommen ausreichend. Bis es an die richtigen Grafiken ging und auf einmal nichts mehr aneinander passte. Die wichtigste Sache dabei ist ja, dass in einem starren Gitter unverrückbar die Tiles sitzen, und nahtlos aneinander passen müssen. Um es noch schwieriger zu machen sind die Winde natürlich animiert, was den Arbeitsaufwand gleich vervierfacht. Wenn man da mal Bescheid weiß und es auch mal ausprobiert hat ist das alles ja gar nicht mehr so schlimm, aber die Erfahrung muss wohl jeder mal machen. Der richtige Winkelgrad für die sanfteren Anstiege ist übrigens 26,6.

Advertisements

%d Bloggern gefällt das: