Fallender Körper



  • Hallo Community,

    ich programmiere gerade ein 2D-Sidescroller-Spiel. Ein Flugzeug fliegt über eine Landschaft. Die Höhe des Flugzeugs wird dem Benutzer über seinen Schatten visualisiert. Das Flugzeug hat Bomben an Bord. Ich möchte eine Zielsteuerung programmieren, also der Einschlagspunkt einer Bombe soll mit einem kleien Fadenkreuz angezeigt werden.

    Das Flugzeug hat folgende Eigenschaften:
    X-Position      : fXPos
    Y-Position      : fYPos
    Höhe            : fAlt
    Geschwindigkeit : fSpeed
    
    Die Bombe hat folgende Eigenschaften:
    X-Position          : fXPos  (Beim Abwurf = fXPos  des Flugzeugs)
    Y-Position          : fYPos  (Beim Abwurf = fYPos  des Flugzeugs)
    Höhe                : fAlt   (Beim Abwurf = fAlt   des Flugzeugs)
    Geschwindigkeit     : fSpeed (Beim Abwurf = fSpeed des Flugzeugs)
    Fallgeschwindigkeit : m_fAltSpeed
    

    Die Fallgeschwindigkeit der Bombe ist momentan konstant, d.h. sie beschleunigt nicht. Die Geschwindigkeit in X und Y Richtung bleibt auch konstant, d.h. der Luftwiderstand wird momentan ignoriert.

    Wie kann ich die X und Y Koordinate des EInschlagspunkt errechnen? Wäre super, wenn mir jemand einen Tip geben kann.

    Guten Gruß und gute Ostern,
    Fee



  • Widerspricht es sich nicht, dass du eine Höhe und eine y Position der Bombe hast? Zumindest bei 2D sollte diese koordinate übereinstimmen!?

    Und dann ist einfach eine lineare funktion, dh. eine gerade (wenn kein luftwiderstand, etc)
    Die Formel für eine Gerade ist

    (x,y) = (x1,x2) + t*(a,b)

    wobei in deinem fall a,b die geschwindigkeit der bombe in x,y richtung wäre, also
    a = Geschwindigkeit beim Abwurf
    b = Fallgeschwindigkeit der Bombe

    x1,x2 = Abwurfpunkt, also Position des Flugzeugs

    t = Zeit
    x,y Position nach gewisser Zeit

    Hast du am boden geometrie?

    sonst nimmst du den boden einfach als eine gerade an mit

    (x,y) = t*(1,0)

    und schneidest die beiden geraden, dann hast du deinen Einschlagpunkt.

    mfg, stefan



  • Danke für deine Antwort. Es handelt sich um ein 2D Spiel insofern, als dass das Rendering mit einer 2D-Engine geschieht. Sorry für die schlechte Erklärung. Mathematisch gesehen ist es ein 3D-Spiel. X und Y Position sind die Koordinaten auf dem Boden. X ist die Horizontale, Y die Vertikale.
    Ich Depp hatte noch vergessen, dass das Flugzeug noch einen Richtungswinkel hat. (Sorry). Die Bewegung der Bombe wird so berechnet.

    VOID CBomb::Move()
    {
    	m_fXPos += (float) g_LookupTable.cos[m_iDirAngle] * m_fSpeed * g_FrameTime;
    	m_fYPos += (float) g_LookupTable.sin[m_iDirAngle] * m_fSpeed * g_FrameTime;
    	m_fAlt  -= (m_fAltSpeed * g_FrameTime);
    }
    

    D.h. irgendwie muss in die Berechnung des Einschlagspunktes noch sin und cos "mit rein".



  • Ich habs.
    Nachdem das Brett vor dem Kopf weg war, war es einfach... *g*

    iScreenX = (int) (fPlaneXPos + (g_LookupTable.cos[iPlaneDirAngle] * fPlaneSpeed * fPlaneAlt / m_fAltSpeed));
    iScreenY = (int) (fPlaneYPos + (g_LookupTable.sin[iPlaneDirAngle] * fPlaneSpeed * fPlaneAlt / m_fAltSpeed));
    

Anmelden zum Antworten