[SDL] MoveTo() Funktion schreiben



  • Hallo,

    ich versuche zur Zeit eine Funktion zu schreiben um eine fließende Bewegung hinzubekommen. Hier erstmal der Code.

    // fp ist die erste Position, mt wohin es soll.
    int MoveTo(int i, int fp_x, int fp_y, int mt_x, int mt_y) {
      int cx = fp_x - mt_x;
      int cy = fp_y - mt_y;
      int s = cx/cy; // "Steigung"
    
      // y_axis hat nun den y wert - hoffe ich
      int y_axis = s*i; 
      return y_axis;
    }
    
    int main() {
      // ... blabla
      //Unsere Main Loop 
      while(bRun) { 
      // ... blabla
           if(mt_x != fp_x) {
              rImage.y = MoveTo(i, rImage.x, rImage.y, 102, 93);
              rImage.x = rImage.x; 
              i++;
              // Bild zeichnen
           }
    }
    

    Leider funktioniert es nicht. Gibt es in der SDL nicht eine Funktion die das macht was ich will?



  • Die Steigung wird nur selten eine Ganzzahl sein.



  • Die Steigung wird nur selten eine Ganzzahl sein.

    Ne, sie würde immer eine Ganzzahl sein, nur immer falsch gerundet.
    Die Funktion ist ja

    int moveto();
    // nicht 
    double moveto();
    

    Wenn ich aber sowas mach:

    int runden(double blubb) { return blubb<0?blubb-.5:blubb+.5; }
    
    // y_axis hat nun den y wert - hoffe ich
      int y_axis = s*i;
      return runden(y_axis);
    

    Ist der Verlauf doch nicht exakt, oder?



  • Das Zwischenergebnis s ist ja bei dir schon eine Ganzzahl, daher ist das Ergebnis evtl. falsch, z.B. bei cx = 4 und cy = 5 kommt 0 heraus.
    Daher berechne es besser so:

    int y_axis = (cx*i) / cy;
    

    Den Sonderfall cy = 0 solltest du auch noch abfangen...


Anmelden zum Antworten