Domanda

Con riferimento a questo gioco di programmazione attualmente sto costruendo.

ho scritto il seguente metodo per spostare (tradurre) una tela per una distanza specifica e secondo all'angolo corrente:

private void MoveBot(double pix, MoveDirection dir)
    {
        if (dir == MoveDirection.Forward)
        {
            Animator_Body_X.To = Math.Sin(HeadingRadians) * pix;
            Animator_Body_Y.To = ((Math.Cos(HeadingRadians) * pix) * -1);
        }
        else
        {
            Animator_Body_X.To = ((Math.Sin(HeadingRadians) * pix) * -1);
            Animator_Body_Y.To = Math.Cos(HeadingRadians) * pix;
        }

        Animator_Body_X.To += Translate_Body.X;
        Animator_Body_Y.To += Translate_Body.Y;

        Animator_Body_X.From = Translate_Body.X;
        Translate_Body.BeginAnimation(TranslateTransform.XProperty, Animator_Body_X);

        Animator_Body_Y.From = Translate_Body.Y;
        Translate_Body.BeginAnimation(TranslateTransform.YProperty, Animator_Body_Y);

        TriggerCallback();
    }

Uno dei parametri che accetta è un numero di pixel che dovrebbero essere coperte durante la traduzione.

Per quanto riguarda il codice precedente, Animator_Body_X e Animator_Body_Y sono di tipo DoubleAnimation, che vengono poi applicati all'oggetto TranslateTransform del robot: Translate_Body


Il problema che sto affrontando è che il robot (che è una tela) si muove ad una velocità diversa a seconda della distanza immesso. Quindi, maggiore è la distanza, più velocemente il robot si muove! Quindi, per mettere in prospettiva, se la distanza è immesso 20, il robot si muove abbastanza lento, ma se la distanza è immesso 800, spara letteralmente fuori dallo schermo.

ho bisogno di fare costante questa velocità, irrilevante della distanza immesso.

Credo di aver bisogno di modificare alcune delle proprietà Animator_Body_X e Animator_Body_Y in base alla distanza in ingresso, ma non so che cosa tweak esattamente (penso po 'di matematica deve essere fatto pure).

Ecco un lista del DoubleAnimation proprietà che forse si vuole dare un'occhiata a conoscere questo numero.

È stato utile?

Soluzione

è che ci sono motivo per cui stai usando DoubleAnimation? DoubleAnimation è stato progettato per assumere un valore da A a B nel corso di un periodo di tempo specifico utilizzando interpolazione lineare accelerazione / decelerazione ad inizio / fine di tale periodo, se richiesto (che è per questo che è "più veloce" per la distanza più lunga .. ha ancora molto da fare allo stesso tempo!). Con gli sguardi delle cose ciò che si sta cercando di fare è spostare qualcosa di una distanza fissa ogni "frame" a seconda di quale direzione si sta affrontando? Che non sembra per adattarsi a me.

Si potrebbe calcolare la lunghezza dell'animazione, a seconda della distanza, quindi la lunghezza è più lungo per distanze maggiori, quindi la voce è sempre in movimento alla stessa "velocità". Per me, ha più senso per spostare solo l'elemento da soli però. È possibile calcolare una velocità di oggetti in base ai criteri di angolo, quindi ogni "frame" è possibile spostare manualmente l'elemento per quanto ha bisogno di andare in base a quella velocità. Con questo metodo si potrebbe anche applicare facilmente l'attrito ecc per la velocità se necessario.

Altri suggerimenti

La matematica che dovete fare è: velocità * Tempo = distanza

Quindi, per mantenere la velocità costante è necessario modificare la durata dell'animazione:

double pixelsPerSecond = 5;
animation.Duration = TimeSpan.FromSeconds(distance/pixelsPerSecond);

A proposito, non credo che le animazioni sono la soluzione migliore per spostare il vostro robot.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top