Methode für Schwerthieb in Genesis3d



  • Hallo zusammen,
    ich bin beim durchlesen des Buches "Spieleprogrammierung mit C++ und Genesis3d für Kids" von Hans-Georg Schuhmann auf folgende Methode gestoßen die eine Art Schußwaffe darstellen soll:

    bool TPlayer::GetTarget (TFigur Figur,
      float TargetWidth, float TargetScale)
    {
      const float Diff = 20.0;
      geVec3d DiffVector, TempVector, TargetVector;
      geExtBox TargetBox; float Richtung;
      // Startvektor setzen
      TempVector = ViewVector;
      // ggf. Höhe und Richtung anpassen
      if (TargetScale < 0)
      {
        TempVector.Y =
          Figur.ViewVector.Y + Figur.BodyHeight;
        Richtung = PI;
      }
      else
      {
        TempVector.Y += BodyHeight;
        Richtung = 0;
      }
      // Skalierungswert nicht negativ
      TargetScale = abs(TargetScale);
      // Zielvektor setzen
      TargetVector.X = TempVector.X 
        - TargetWidth * sin(TurnVector.Y+Richtung);
      TargetVector.Y = TempVector.Y 
        + TargetWidth * sin(TurnVector.X);
      TargetVector.Z = TempVector.Z 
        - TargetWidth * cos(TurnVector.Y+Richtung);
      // Differenz zwischen Start und Ziel
      geVec3d_Subtract
        (&TargetVector, &TempVector, &DiffVector);
      // Schrittweite fürs Absuchen der "Ziellinie"
      float Faktor = TargetWidth / Diff;
      // Diff-Werte "stückeln"
      geVec3d_Scale (&DiffVector, 1/Faktor, &DiffVector);
      // "Gefahrenzone" des Gegenübers ermitteln/setzen
      TargetBox = Figur.GetBBox();
      // "Zielgenauigkeit"
      geExtBox_Scale (&TargetBox,
        TargetScale, TargetScale, TargetScale);
      // ggf."Kopfausgleich"
      if (TargetScale < 1)
        geExtBox_Translate
          (&TargetBox, 0.0, Figur.BodyHeight/10, 0.0);
      // Zielstrecke nach Aufenthalt von Figur "absuchen"
      for (int i = 1; i <= Faktor; i++)
      {
        geVec3d_Add
          (&TempVector, &DiffVector, &TempVector);
        if (geExtBox_ContainsPoint (&TargetBox, &TempVector))
          return true;
      }
      // ansonsten "ziellos"
      return false;
    }
    

    Meine Frage ist wie die Methode für einen Schwertstreich im rechten Winkel zur Z-Achse des Spielers aussehen müsste 😕 . Also wie wird aus einem endlosen Strahl eine Drehbewegung mit kurzer Reichweite? 😉

    MFG Marcurion


  • Mod

    geht es dir darum den gegner zu finden?
    mach entweder eine funktion die ein paar mehr strahlen rundum schickt und pruefe beim treffer, ob die in reihweite waren.
    oder pruefe ob vor dir im radius deiner reichweite ein gegner war, beim schlag.



  • OK das ist schoin mal ein guter Ansatz aber wie kann ich die Koordinaten für die anderen Strahlen festlegen mit TargetVector=ViewVector + 30(Grad)oder brauch ich da irgendwelche cosinus und sinus Werte?
    Ich hab mir überlegt das wenn mann statt der Schleife

    for (int i = 1; i <= Faktor; i++)
    

    einfach statt Faktor eine Zahl wie 2 einsetzt ,dass dann nur die ersten zwei Punkte abgefragt werden, stimmt doch oder?

    MFG Marcurion


Anmelden zum Antworten