Frage

Ich habe einige störenden Ruckeln meine Sprite bekam.

Im Grunde genommen, wenn der Benutzer einen Punkt auf dem Bildschirm berührt, sollten die Sprite zu diesem Punkt bewegen. Das funktioniert meistens gut ... es ist auch unter Berücksichtigung eines Delta -. Weil Framerate nicht consistant sein kann

Allerdings merke ich, dass die y-Bewegung endet in der Regel vor der x-Bewegung (auch wenn die Entfernungen zu überwinden gleich sind), so scheint es, wie das Sprite in einer ‚L‘ -Form zu bewegen, anstatt eine glatte diagonale Linie.

Vertikale und horizontale Geschwindigkeit (vx, vy) sind beide auf 300. Alle Ideen, was falsch ist? Wie kann ich mich über meine Sprite immer in einer glatten diagonalen Linie zu bewegen?

 - (void)update:(ccTime)dt
{
int x = self.position.x;
int y = self.position.y;

    //if ball is to the left of target point
if (x<targetx)
{
            //if movement of the ball won't take it to it's target position
    if (x+(vx *dt) < targetx)
    {
        x += vx * dt;
    }
    else {
        x = targetx;
    }

} else if (x>targetx) //same with x being too far to the right
{
    if (x-(vx *dt) > targetx)
    {
        x -= vx * dt;
    }
    else {
        x = targetx;
    }

}
if (y<targety)
{
    if (y+(vy*dt)<targety)
    {
        y += vy * dt;
    }
    else {
        y = targety;
    }

} else if (y>targety)
{
    if (y-(vy*dt)>targety)
    {
        y -= vy * dt;
    }
    else {
        y = targety;
    }

}
self.position = ccp(x,y);
}
War es hilfreich?

Lösung

Sie wollen von jedem (x, y) bis (TargetX, targetY) bewegen und gleichzeitig an beiden Koordinaten kommen (zur Vermeidung des „Dogleg“). So nehme an, die x Geschwindigkeit vx und Sie bekommen es in t Sekunden. Das bedeutet vx = (TargetX - x) / t. t müssen für die y-Koordinate, wenn man sich gleichzeitig auf den gleichen Punkt glatte Bewegung wollen, so dass Mittel t = (TargetX - x) / vx und vy müssen tatsächlich (targetY - y) * vx / (TargetX -. x)

Mit anderen Worten: Sie können nicht gesetzt vx und vy getrennt und erhalten das gewünschte Ergebnis.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top