Spaß mit Früchten (war: C++ programm)



  • Ich hatte mir die MessageProc nicht angesehen und deshalb gesagt, dass die so bleiben kann, weil switch und so.
    Dann habe ich gesehen, dass der da viel reingepackt hat und habe gesagt er solls auslagern.



  • Sone schrieb:

    Nathan schrieb:

    So ungefähr 2700 zeilen code insgesamt, also relativ klein.
    Und ab und zu gibt es da schon funktionen mit 20 zeilen.

    Hmm. Nicht schlecht. Guck mal hier bei mir: https://sourceforge.net/p/linacsim/code/ci/master/tree/

    Bspw.

    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                (longer + distance) * h / distance - h,
                                0 });
            else
            {
                longer =- longer;
    
                auto y = h - (distance-longer)/distance * h,
                     x = w - (distance-longer)/distance * w;
    
                if( h - y >= 0
                &&  distance - longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    

    Wie kürzt du das ab? 🙂

    Auch schau es mir mal genau an. Dauert aber ein ganzes Weilchen...



  • Volkard, nicht vergessen: Ich mach es noch schöner.
    Sprich: Ich werde Kommentare hinzufügen und viel mehr Dokumentation.
    ➡ http://www.c-plusplus.net/forum/316139

    Aber vielen Dank dass du mal draufschaust 🙂 👍 👍



  • HN versuche einzusetzen da wo es am besten geht und gibt dem Code die bessere Übersichtlichkeit.
    Das mit Auslagern usw...das ist mir alles bekannt.



  • Nathan schrieb:

    Und Funktionen sollten eh nie die 10 Zeilen überschreiten.

    wo hastn diese "weisheit" her?
    das ist käse.
    http://www.welt.de/img/wissen_ipad/crop101879751/7578726492-ci3x2l-w620/schimmelkaese-DW-Wissenschaft-Frankfurt-Main-Archiv.jpg



  • kaesedetector schrieb:

    Nathan schrieb:

    Und Funktionen sollten eh nie die 10 Zeilen überschreiten.

    wo hastn diese "weisheit" her?
    das ist käse.
    http://www.welt.de/img/wissen_ipad/crop101879751/7578726492-ci3x2l-w620/schimmelkaese-DW-Wissenschaft-Frankfurt-Main-Archiv.jpg

    Orthographie nicht vergessen.

    Und Käse ist das nicht unbedingt. Auf keinen Fall der Tipp, die Funktion so klein zu halten wie möglich.
    Der ist wichtig.



  • @Sone:

    @Nathan: Progge in Code::Blocks & NET Beans.

    Boah, du mieser Progger. Schon ein paar H@ck$ geproggt?

    🙂 bin noch in lern phase. Ich finde die IDE's für anfang ausreichend, meine Favorit IDEs: Intel oder Embarcadero.



  • Sone schrieb:

    Nathan schrieb:

    So ungefähr 2700 zeilen code insgesamt, also relativ klein.
    Und ab und zu gibt es da schon funktionen mit 20 zeilen.

    Hmm. Nicht schlecht. Guck mal hier bei mir: https://sourceforge.net/p/linacsim/code/ci/master/tree/

    Bspw.

    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                (longer + distance) * h / distance - h,
                                0 });
            else
            {
                longer =- longer;
    
                auto y = h - (distance-longer)/distance * h,
                     x = w - (distance-longer)/distance * w;
    
                if( h - y >= 0
                &&  distance - longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    

    Wie kürzt du das ab? 🙂

    //Ausgangspunkt:
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                (longer + distance) * h / distance - h,
                                0 });
            else
            {
                longer =- longer;
    
                auto y = h - (distance-longer)/distance * h,
                     x = w - (distance-longer)/distance * w;
    
                if( h - y >= 0
                &&  distance - longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    
    //Autsch, ich muss mit Stg+Mausrad die Schrift kleiner machen, um die ganze Funktion zu sehen. 
    //Ich mach nämlich auch gerne kleine Funktionen. Offenbar nicht so große.
    
    //Ich versuche mal, zu vereinfachen, bzw den Code erstmal zu kapieren.
    //Erstmal stört das Ändern der Übergabevariablen longer ungemein. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                (longer + distance) * h / distance - h,
                                0 });
            else
            {
                //longer =- longer;
    
                auto y = h - (distance+longer)/distance * h,
                     x = w - (distance+longer)/distance * w;
    
                if( h - y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    
    //Solche Änderungen mache ich jetzt. Sachen, die die Funktion offensichtlich 
    //nicht ändern. Hier die Negierung von longer augfhegoben und stattdessen im 
    //Folgenden das Vorzeichen von longer immer umgedreht. 
    
    //Anscheinende wird beim move mit x was Einfaches gemnacht und mit y 
    //was Kompliziertes. Da muß Mathe ran. 
    
    (longer + distance) * h / distance - h
    =
    h * (longer + distance) / distance - h
    =
    h * (longer/distance + distance/distance) - h
    =
    h * (longer/distance + 1) - h
    =
    h * (longer/distance) + h*1 - h
    = 
    h * (longer/distance)
    
    //Aha, es wird doch. Gleich einbauen. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                h * (longer/distance),
                                0 });
            else
            {
                auto y = h - (distance+longer)/distance * h,
                     x = w - (distance+longer)/distance * w;
    
                if( h - y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    
    //Jetzt x und y anschauen. 
                auto y = h - (distance+longer)/distance * h,
                     x = w - (distance+longer)/distance * w;
    //also
                auto y = h - (distance/distance+longer/distance) * h,
                     x = w - (distance/distance+longer/distance) * w;
    //also
                auto y = h - (1+longer/distance) * h,
                     x = w - (1+longer/distance) * w;
    //also
                auto y = h - (1*h + longer/distance*h),
                     x = w - (1*h + longer/distance*w);
    //also
                auto y = h - 1*h - longer/distance*h,
                     x = w - 1*h - longer/distance*w;
    //also
                auto y = - longer/distance*h,
                     x = - longer/distance*w;
    //und einbauen...
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                h * (longer/distance),
                                0 });
            else
            {
                auto y = - longer/distance*h,
                     x = - longer/distance*w;
    
                if( h - y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ x, -y, 0 });
            }
        }
    }
    
    //Och, eigentlich gefällt mir das - vor longer nicht. 
    //Ich negiere x und y und drehe im Folgenden deren Vorzeichen um. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                h * (longer/distance),
                                0 });
            else
            {
                auto y = longer/distance*h,
                     x = longer/distance*w;
    
                if( h + y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ -x, y, 0 });
            }
        }
    }
    
    //x und y wollen raus. Das geht übrigens nur wegen dem ersten Sritt, wo 
    //ich das longer=-longer weggemacht habe. Ist nicht gut, wenn Variablen in der 
    //Funktion ohne schwere Not ihre Bedeutung ändern. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            auto y = longer/distance*h,
                 x = longer/distance*w;
    
            if( longer > 0 )
                mCamera->move({ -w * longer / distance,
                                h * (longer/distance),
                                0 });
            else
            {
    
                if( h + y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ -x, y, 0 });
            }
        }
    }
    
    //Klar, daß sie im ersten move verwendet werden. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( mActive
        &&  longer != 0 )
        {
            auto const w = std::abs(mCamera->getPosition().x),
                       h = std::abs(mCamera->getPosition().y);
    
            Ogre::Real const distance = std::sqrt( w*w + h*h );
    
            auto y = longer/distance*h,
                 x = longer/distance*w;
    
            if( longer > 0 )
                mCamera->move({ -x, y, 0 });
            else
            {
    
                if( h + y >= 0
                &&  distance + longer >= 25 )
                    mCamera->move({ -x, y, 0 });
            }
        }
    }
    
    //Oh, ich habe ein DejaVu
    
    //Erste Zeile: Nicht testen und reinverschachteln, sondern testen und beenden!
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer > 0 )
            mCamera->move({ -x, y, 0 });
        else
        {
    
            if( h + y >= 0
            &&  distance + longer >= 25 )
                mCamera->move({ -x, y, 0 });
        }
    }
    
    //Und jetzt den selben Trick unten. 
    //Nicht testen und reinverschachteln, sondern testen und beenden!
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer > 0 )
            mCamera->move({ -x, y, 0 });
        else
        {
    
            if( h + y < 0 || distance + longer < 25 )
                return;
            mCamera->move({ -x, y, 0 });
        }
    }
    
    //Das Schubst auch die Tu-Was-Zeilen nach unten. Perfekt, sie sind ja gleich. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer > 0 )
            ;
        else
        {
    
            if( h + y < 0 || distance + longer < 25 )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //if umdrehen
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( h + y < 0 || distance + longer < 25 )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //Das
    h + y < 0
    //erweckt gleich auch mal mein Interesse. 
    h + y < 0
    
    h + longer/distance*h < 0
    
    longer/distance*h < -h   //durch h teilen
    
    longer/distance < -1    //mal distance
    
    longer < -distance    //mal distance
    
    //versteh ich nicht. Mal einbauen. 
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( longer < -distance  || distance + longer < 25 )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //also
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( longer < -distance  || longer < 25-distance )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //also
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( longer < 0-distance  || longer < 25-distance )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //Hmm. 
    // wenn longer kleiner 25-distance, dann ist longer auch sicher kleiner 0-distance. 
    //einbauen...
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer <= 0 )
        {
            if( longer < -distance )
                return;
        }
        mCamera->move({ -x, y, 0 });
    }
    
    //also distance ist ja immer nichtnegativ...
    //Dann kann longer nur kleiner als -distance sein, wenn longer <=0. 
    //einbauen...
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive || longer == 0 )
            return;
    
        auto const w = std::abs(mCamera->getPosition().x),
                   h = std::abs(mCamera->getPosition().y);
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        auto y = longer/distance*h,
             x = longer/distance*w;
    
        if( longer < -distance )
                return;
    
        mCamera->move({ -x, y, 0 });
    }
    
    //So, Strg+Mausrad und Schrift wieder groß machen und anschauen...
    
    //Jo, mehr als 10 Zeilen.
    

    Alle Code-Transformationen ohne, daß ich weiß, was die Funktion macht. Bestimmt haben sich Fehler eingeschlichen. Normalerweise werden bei so Transformationen eher Fehler augfgedeckt, weil der COde einfacher wird. Oftmals kapiert man erst, was man geschrieben hatte und dann fällt einem ein, daß es noch einfacher oder schneller geht.



  • Sone schrieb:

    Volkard, nicht vergessen: Ich mach es noch schöner.

    Das wäre toll.

    Sone schrieb:

    Sprich: Ich werde Kommentare hinzufügen und viel mehr Dokumentation.

    Wozu? Mach doch den Code lesbar. Ich weiß immernochnicht, was longer bedeutet.
    Jo, Kommentar wäre gut, was die Funktion überhaupt machen soll. Das WIE muss aber im Allgemeinen nicht erklärt werden.



  • Naja, wenn ich für jede Funktion so ein Refactoring erstelle, wäre das Wahnsinn.

    Ich setze mich mal kurz ran und mach es selbst, warte kurz.



  • // Hey, das macht Spaß
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
      if (!mActive || longer == 0)
        return;
    
      auto const w = std::abs(mCamera->getPosition().x),
                 h = std::abs(mCamera->getPosition().y);
      Ogre::Real const distance = std::sqrt( w*w + h*h );
    
      auto y = longer/distance*h,
           x = longer/distance*w;
    
      if (longer < -distance)
        return;
    
      mCamera->move({ -x, y, 0 });
    }
    
    // Es wird mit longer/distance skaliert.  Gleich mal eine neue Variable reinnehmen
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
      if( !mActive || longer == 0 )
        return;
    
      auto const w = std::abs(mCamera->getPosition().x),
        h = std::abs(mCamera->getPosition().y);
      Ogre::Real const distance = std::sqrt( w*w + h*h ),
                       scale    = longer/distance; 
    
      auto y = scale*h,
           x = scale*w;
    
      if( longer < -distance )
        return;
    
      mCamera->move({ -x, y, 0 });
    }
    
    // Mathe:
    longer < -distance
    longer/distance < -distance/distance
    scale < -1
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
      if( !mActive || longer == 0 )
        return;
    
      auto const w = std::abs(mCamera->getPosition().x),
                 h = std::abs(mCamera->getPosition().y);
      Ogre::Real const distance = std::sqrt( w*w + h*h ),
                       scale    = longer/distance; 
    
      auto y = scale*h,
           x = scale*w;
    
      if (scale < -1)
        return;
    
      mCamera->move({ -x, y, 0 });
    }
    
    // Unnötige Variablen entfernen
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
      if (!mActive || longer == 0)
        return;
    
      auto const w = std::abs(mCamera->getPosition().x),
                 h = std::abs(mCamera->getPosition().y);
      Ogre::Real const scale = longer/std::sqrt( w*w + h*h ) 
    
      if (scale < -1)
        return;
    
      mCamera->move({ -w*scale, h*scale, 0 });
    }
    
    // abs nach hinten verschieben
    
    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
      if (!mActive || longer == 0)
        return;
    
      auto const w = mCamera->getPosition().x,
                 h = mCamera->getPosition().y;
      Ogre::Real const scale = longer/std::sqrt(w*w + h*h);
    
      if (scale < -1)
        return;
    
      mCamera->move({ -std::abs(w)*scale, std::abs(h)*scale, 0 });
    }
    
    // move wieder reinverschachteln
    
    void LinacSimFrameListener::zoom(Ogre::Real longer)
    {
      if (!mActive || longer == 0)
        return;
    
      auto const w = mCamera->getPosition().x,
                 h = mCamera->getPosition().y;
    
      Ogre::Real const scale = longer/std::sqrt(w*w + h*h);
      if (scale >= -1)
        mCamera->move({ -std::abs(w)*scale, std::abs(h)*scale, 0 });
    }
    


  • // Achja, const ist nun offensichtlich und kann deshalb entfernt werden
    
    void LinacSimFrameListener::zoom(Ogre::Real longer)
    {
      if (!mActive || longer == 0)
        return;
    
      auto w = mCamera->getPosition().x,
           h = mCamera->getPosition().y,
           scale = longer/std::sqrt(w*w + h*h);
    
      if (scale >= -1)
        mCamera->move({ -std::abs(w)*scale, std::abs(h)*scale, 0 });
    }
    


  • Ich habs jetzt. Es funktioniert.

    void LinacSimFrameListener::zoom( Ogre::Real longer )
    {
        if( !mActive // the simulation is not active.
        ||  longer == 0 /* nothing at all (?) */ )
            return;
    
        auto w = mCamera->getPosition().x,
             h = std::abs(mCamera->getPosition().y);
    
        Ogre::Real const distance = std::sqrt( w*w + h*h );
    
        if( distance + longer >= 25 )
            mCamera->move({ longer * w / distance,
                            longer * h / distance,
                            0 });
    }
    

    Und es ist genau das selbe wie bei volkard 😃 😃

    Edit³: Noch etwas verbessert (abs-Aufruf eliminiert



  • Sone schrieb:

    Naja, wenn ich für jede Funktion so ein Refactoring erstelle, wäre das Wahnsinn.

    Momentmal! Ich habs ohne die Einsicht gemacht, was das bedeutet. Da ist es viel Arbeit.

    reftor und Du wissen, was da passiert. Dann ist es viel einfacher.

    Sone schrieb:

    Naja, wenn ich für jede Funktion so ein Refactoring erstelle, wäre das Wahnsinn.

    Das verlange ich aber von Dir. Nicht im Nachhinein für fertige Funktionen, das wäre zu viel. Du willst kein PI sein. Ich will keinen PI im Forum.

    Jede Funktion wird nach jeder Änderung nochmal im Ganzen kurz angeschaut, ob die Änderung nicht Folgeverbesserungen aufdrängt.
    Jede Funktion, die zufriedenstellen läuft, wird nochmal angeschaut.
    Also Laufendes Refactoring. Direkte Müllvermeidung.

    Das bewirkt langfristig, daß direkt schon beim oder vor dem Eintippen die Verbesserungen Dir in die Finger fließen. Daß Du gleich schon Code baust, den man nicht refactoren muss.

    Das will ich haben.

    Und dann bitte nicht in Größenwahn verfallen. Nur weil Du ein halbes Jährchen weiter bist als mancher Nube, weil Du 20 IQ-Punkte mehr hast, das ist alles kein Grund, aus einer Code-Mücke einen Elefanten zu machen. Wenn SeppJ was anmeckert, dann aus Erfahrung, er hat den Fehler schon gemacht. Er kennt die Untiefen. Er weiß, wohin, wohin der Nube steuert und versucht, zu lenken. Bei Dir erscheint es mir voll oft, daß Du nur planlos ruft, welche Warnschilder Du schonmal gesehen hast, die so laut wie SeppJ zu rufen, führt aber nur dazu, daß der Nube dann an den Banden wie ein Flipperball umherhopst.



  • Sone schrieb:

    Und es ist genau das selbe wie bei volkard 😃 😃

    Puh. Waren viele Transformationen. Hätte nicht gedacht, daß ich alle fehlerfrei mache.

    Sone schrieb:

    Edit³: Noch etwas verbessert (abs-Aufruf eliminiert

    Kam das aus dem Wissen über den Zweck der Funktion oder hab ich's schlicht übersehen?



  • ist das hier nicht alles ein klein wenig off-topic?
    😃



  • offtopicdetector schrieb:

    ist das hier nicht alles ein klein wenig off-topic?
    😃

    Ich glaube, der TE hat bereits kapiert, wie das Programm aussehen muss.

    Ich habe hier den "entscheidenden" Tipp gegeben.



  • volkard schrieb:

    Kam das aus dem Wissen über den Zweck der Funktion oder hab ich's schlicht übersehen?

    Nein, es hing mit dem Wissen zusammen, was die Funktion macht.

    auto w = abs( mCamera->getPosition().x ),
           ...
        -longer * w / distance,
    

    ➡

    auto w = mCamera->getPosition().x,
           ...
        longer * w / distance,
    

    Der Witz ist... mCamera->getPosition().x ist immer negativ. Die Kamera bleibt nur auf der einen Seite. 🤡

    Jede Funktion wird nach jeder Änderung nochmal im Ganzen kurz angeschaut, ob die Änderung nicht Folgeverbesserungen aufdrängt.
    Jede Funktion, die zufriedenstellen läuft, wird nochmal angeschaut.
    Also Laufendes Refactoring. Direkte Müllvermeidung.

    Ja, so mache ich es eigentlich. Nur dass ich nicht ganz so genau hinsehe. 👍

    Und dann bitte nicht in Größenwahn verfallen. Nur weil Du ein halbes Jährchen weiter bist als mancher Nube, weil Du 20 IQ-Punkte mehr hast, das ist alles kein Grund, aus einer Code-Mücke einen Elefanten zu machen. Wenn SeppJ was anmeckert, dann aus Erfahrung, er hat den Fehler schon gemacht. Er kennt die Untiefen. Er weiß, wohin, wohin der Nube steuert und versucht, zu lenken. Bei Dir erscheint es mir voll oft, daß Du nur planlos ruft, welche Warnschilder Du schonmal gesehen hast, die so laut wie SeppJ zu rufen, führt aber nur dazu, daß der Nube dann an den Banden wie ein Flipperball umherhopst.

    Wait what?



  • offtopicdetector schrieb:

    ist das hier nicht alles ein klein wenig off-topic?
    😃

    Schon.
    Aber der "Spaß mit Früchten" ist vollständig geklärt. Danach dürfen Threads abweichen.



  • Sone schrieb:

    Wait what?

    Kannste man schnell "die 36 kammern der shaolin" aus dem stream gucken?
    Und "Karate Kid"?


Anmelden zum Antworten