Liebes Forum
Ich schlage mich nun seit Gestern Morgen mit dem Thema Flagbahnen herum und bin mit meinem Latein am Ende. Zwar habe ich jetzt eine Flugbahn, sie ist mir aber nicht schön und nicht
Präzise genug.
Natürlich war ich beim 'hgseib' und habe mir seine Ballistik-Studien angeschaut, es war aber nicht möglich die Ziel-Koordinaten zu Variieren. Ich hab es auch über sin/cos Versucht aber dann fliegen mir die Kugeln erst recht um die Ohren.
Meine Flugbahn:
PHP-Code:
// Bühnen action
// Zielposition ermitteln
// StartPosition ermitteln
// Ziel-Objekt ermitteln
// Flugkörper kreieren
var ball:Ball = new Ball(StartPosition_pnt, Zielposition_pnt, Ziel-Objekt);
addChild(ball);
PHP-Code:
// Flugkörper Klasse
public class Ball extends MovieClip
{
private var startPos_pnt:Point; // Start Position
private var zPos_pnt:Point = new Point(); // Target
private var ziel_obj:Sprite; // Target
private var ball_spr:Sprite;
// hier müssen die Zeichen Variablen stehen und später im code noch der Ball gezeinent werden (ist in der zip)
private var g_num:Number = 0.9; // Erdanziehung
private var schwung_num:Number = 35;
private var streckeX_num:Number;
private var xVersatz_num:Number;
private var xSchungEndeDistance:Number;
public function Ball(pStartPos:Point, pZielPos:Point, pZiel:Sprite):void
{
this.x = pStartPos.x;
this.y = pStartPos.y;
ziel_obj = pZiel;
ballRadius_int = pR;
zPos_pnt = pZielPos;
startPos_pnt = pStartPos;
streckeX_num = Math.abs(zPos_pnt.x - startPos_pnt.x);
xSchungEndeDistance = streckeX_num/3;
xVersatz_num = streckeX_num/1000;
drawBullet();
this.addEventListener(Event.ENTER_FRAME, rechneFlugbahn);
}
private function rechneFlugbahn(e:Event):void
{
var xDistance = Math.abs(startPos_pnt.x - this.x);
if (xDistance > xSchungEndeDistance) { // Wenn die x distanz > als das 1stes Drittel der gesamt x-Strecke ist,
g_num *= 1.07; // die Erdanziehung erhöhen
schwung_num -= g_num; // und vom Schwung abziehen
// x position verschieben, nötig für große Entfernungen, y flach sonst zu schnell ab und das Ziel wird nicht erreicht
var xDist:Number = zPos_pnt.x - this.x;
var versatz:Number = xDist > 0 ? xVersatz_num:-xVersatz_num;
zPos_pnt.x += versatz;
} else { // Im ersten Drittel der Flugbahn
schwung_num *= g_num; // Schwung verringern
}
this.y += (((zPos_pnt.y) - this.y) /10) - schwung_num;
this.x += ((zPos_pnt.x - this.x) /7);
checkKolision();
}
private function checkKolision():void // e.target = this.ENTER_FREAME
{
if (ziel_obj.hitTestObject(this)) {
trace('Kolision');
this.removeEventListener(Event.ENTER_FRAME, rechneFlugbahn);
this.parent.removeChild(ziel_obj);
this.parent.removeChild(this);
}
}
}
Anhand der Berrechnung von: (xVersatz_num = streckeX_num/1000), dem nötigen Versatz der X-Position der ZielKordinaten bei weiteren Entfernungen, kann man sehen wie 'krüppelig' meine Flugbahn geworden ist. Und überhaup ist die Kurve nicht Optimal.
Ich bin mir sicher das es eine schönere Flugbahn Variante gibt.