Dawidds wspomniał, że to tak banalny temat, a tyle odpowiedzi :) . Chciałem tylko podać, że nikt nie podał prawdziwego rozwiązania. Zostały podane dwie sensowne opcje i obydwie mają ten sam błąd. Oczywiście chodzi mi o:
GML
if(x < pilka.x) x += /ileś tam/
if(x > pilka.x) x -= /ileś tam/
oraz
GML
direction=point_direction(x,y,x,pilka.y);
W czym tkwi problem? Obydwa przypadki mają wspólną cechę - piłka po dotarciu do celu w wielu wypadkach będzie miała nowy, albowiem gdy jej pozycja pionowa ma wynosić 230, a jest na 229 (zakładamy, że jej prędkość to 5), to nagle wynosi 234, znowuż nie jest na swym miejscu i dotrze ponownie do 229.
Rozwiązanie problemu dla obydwu przykładów:
GML
if ( y < pilka.y )
y = min( y + <szybkosc>, pilka.y );
else if ( y > pilka.y )
y = max( y - <szybkosc>, pilka.y );
Oraz drugi:
GML
if ( y != pilka.y )
{
if ( distance_to_point( x, y, x, pilka.y ) < <szybkosc> )
y = pilka.y
else
direction = point_direction( x, y, x, pilka.y);
}
Któż by pomyślał, że takie proste zagadnienie może wywołać tyle kontrowersji :P ...