Poruszenie obiektu znajac kat polozenie itp.

0

statek1.x := round(2sin(statek1.kat)) + statek1.x;
statek1.y := round(2
cos(statek1.kat)) + statek1.y;
otot taki kod ktory wg mnie powinien dzialc ale nie dziala
chcce aby statek1 poruszyl sie w kierunku w kotrym patrzy

wszystko operowane jest na radianach

0

Na czym to poruszasz na Canvasie ? Przy odległości rzędu 2 może być tak że iloczyn sin lub cos dadzą małą wartość co w połączeniu z funkcją Round może działać conajmniej dziwnie : ) Przy takim czymś lepiej sprawdzaj ćwiartkę kąta i w zależności od tego dodawaj lub odejmuj po 1 pixelu.

0

Przy zastosowaniu zaokrąglenia proponuje zrobić "powiększacza" - pomnożyć funckję sin, przez jakąś liczbę, np. 10, i problem z głowy, ponieważ nie można rysowac na części "pixela" :)

0

nic nie dziala

0

Jeżeli rysujesz na canvasie to sin i cos nie przydadzą ci się.

0

no jednak mi sie przydza bo to chodzi tylko o wektor przesuniecia a zawsze mi dzialalo

0

statek1.x := round(2sin(statek1.kat) + statek1.x);
statek1.y := round(2
cos(statek1.kat) + statek1.y);

Ale ten ruch będzie naprawdę minimalny. Co najwyżej 2 piksele. Weź większą wartość.

0

zabieracie sie do tego za przeproszeniem od d... strony.

robimy tak :
TStatek = record
<font color="violet"> x, y : real</span>
end;

procedure rysujStatek;
begin
canvas.draw<font color="violet">(round(statek.x), round(statek.x),</span> statekbmp);
end;

Jak widać, wartości zaokrąglamy dopiero przy rysowaniu, nie przy określaniu położenia. I teraz bedzie na pewno OK,.. pozdrawiam.

/* Zabieramy się do tego od tej strony, z której kod zobaczyliśmy :P - m.D. */

0

nic nie dziala nadal umeiszczam kod zrodlowy pomozce :(
http://www.resportgql.republika.pl/lol.zip

0

I wszystko jasne ! :)
zmienna kat w zwyklej funkcji sin() moze sie zawierac w przedziale 0-360 (albo wielokrotności), natomiast w procedurce rysującej (DrawRotate) przedział ten wynosi 0-255. Lekiem na to jest DX'owa funkcja sin256 (i of coz cos256). Wychodzi z tego taki oto twór :

statek1.x := 10cos256(statek1.kat) + statek1.x;
statek1.y := 10
sin256(statek1.kat) + statek1.y;

// poza tym sin256() jest o niebo szybsza od sin()

pozdrawiam.

0

no nareszcie wszysciuteńko dziala :d :d :d :d :d :d hehe [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1