Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Ruch obiektów

Ostatnio zmodyfikowano 2009-07-03 09:13
Autor Wiadomość
Rares
Temat założony przez niniejszego użytkownika
[Allegro] Ruch obiektów
» 2009-07-02 20:20:02
Piszę sobie grę i mam problem z obrotami. Piszę ją w Allegro i na razie zrobiłem tak:

- wciśnięcie strzałki w górę powoduje zwiększenie zmiennej przyspieszenie
- strzałka w dół powoduje zmniejszenie wartości zmiennej przyspieszenie
- strzałka w lewo zmniejsza zmienną kierunek
- strzałka w prawo zwiększa zmienną kierunek

Teraz chciałbym to zrobić tak, aby podczas obiegu pętli do x oraz y były dodawane odpowiednie liczby, aby przesuwać obiekt po ekranie. Jeśli zmienna kierunek będzie miała wartość 180 to samochód będzie się cofał, czyli operacje na zmiennych x i y będą wyglądały tak:


x += predkosc // predkosc to suma zmiennych przyspieszenie, które są dodawane do prędkości co obieg pętli
y += 0

Dzieje się tak, ponieważ x to zmienna od położenia pionowego, więc musi być do niej dodawana prędkość. Y to położenie obiektu w poziomie, a samochód ma cofać, więc żadna zmiana położenia w poziomie nie jest potrzebna.

Analogicznie zmiana zmiennych następuje, gdy zmienna kierunek równa się 0, 90, 180, 270 lub 360. Ale mam problem z sytuacją, gdy kierunek ma inną wartość. Rozumiem, że muszę wydzielić specjalną zmienną, którą będę mnożył/dzielił/dodawał/odejmował/zwracał resztę podczas zmiany zmiennych x i y. Gdy zmienna kierunek ma 45, wtedy obiekt musi się poruszać w kierunku północno-wschodnim (u mnie obiekt jest początkowo zwrócony na północ (czyli wtedy, gdy kierunek = 0)).

Do x dodaje wtedy predkosc i do y też dodaję predkosc. Wtedy samochód idealnie porusza się pod kątem 45 stopni. Co jeśli kierunek ma np. 39. Wtedy samochód musi się poruszać prawie pod kątem 45 stopni, lecz zmiana x i y nie będzie taka sama. Do x będę dodawał przykładowo 3, ale do y już 4. Będzie to sprawiało pozory takiego kąta, ale nie będzie idealnie pracować. I tu pojawia się pytanie. Jak obliczyć liczbę, dzięki której będę uzyskiwał liczby, które muszę dodać do x i y.

Proszę, aby ktoś wytłumaczył łopatologicznie jak zrobić w grze ruch obiektów: przyspieszanie, hamowanie, obroty. Głównie chodzi mi o uzyskanie obrotów. Resztę fizyki dopracuję sam.

Z góry dziękuje za pomoc. Proszę, abyście mnie nie odsyłali do innych tematów. Wolę, żeby ktoś mi to wytłumaczył :).
P-8152
Tombol
» 2009-07-02 20:35:33
Chociaż sam jestem początkujący to chyba wiem jak Ci pomóc

Przyspieszanie
szybkoscfuryx++; // ofc swoja wartość zależnie od tego jak to ma szybko jechać

Hamowanie
szybkoscfuryx--; // tez zaleznie jak szybko ma hamować

Chyba tak sam mówiłeś to nie wiem o co dokładnie pytasz jak już to wiesz ;p

Ale możesz zrobić że
if(szybkoscfuryx > costamcostam)
if(guzikstrzalkawgore)
fure przyspiesza trochę wolniej

I z hamowaniem tak samo ;p

A co do obrotów to chyba po prostu chcesz tak że jak
if(guzikstrzalkaleft)
szybkoscfuryy --;
?
P-8154
DejaVu
» 2009-07-02 20:36:59
C/C++
double predkosc += przyspieszenie;
double delta_przemieszczenia += predkosc;
double kat = 123.0;
double polozenie_x += cos(( kat * M_PI ) / 180.0 ) * delta_przemieszczenia;
double polozenie_y += sin(( kat * M_PI ) / 180.0 ) * delta_przemieszczenia;
W skrócie: trochę matematyki i trochę fizyki.
P-8155
Tombol
» 2009-07-02 20:45:52
To wyżej nie wygląda łopatologicznie :P
P-8159
Rares
Temat założony przez niniejszego użytkownika
» 2009-07-02 21:00:24
No własnie. Jak mam zmieniać kolejne zmienne. Skręt w lewo zmiana zmiennej kierunek (zmiejszenie zmiennej), w prawo zwiększenie zmiennej. Gdzie mam ulokować te zmienne?
P-8160
Tombol
» 2009-07-02 21:23:50
Ulokuj gdzie chcesz oby działało ;p
Ale i tak musisz zrobić obrót wokół punktu czy coś takiego więc chyba musisz użyć tego wzoru Piotra (nie wiem czy to wzór na to ale chyba tak)
P-8164
Rares
Temat założony przez niniejszego użytkownika
» 2009-07-02 21:34:38

double predkosc+=przyspieszenie;
double delta_przemieszczenia+=predkosc;
double kat = 123.0;
double polozenie_x+=cos((kat*M_PI)/180.0)*delta_przemieszczenia;
double polozenie_y+=sin((kat*M_PI)/180.0)*delta_przemieszczenia;

No, ale po co mi zmienna kat? I którą zmienną była by zmienna z mojej gry - kierunek?

EDIT: Już wiem, po co mi kat, ale co mam zrobić ze zmienną kierunek?
P-8166
Rares
Temat założony przez niniejszego użytkownika
» 2009-07-02 21:50:17
Zresztą zobaczcie na grę:

http://odsiebie.com/pokaz/3942682---fda3.html

Strzałka w górę: przyspieszenie + 1
Strzałka w dół: przyspieszenie - 1
Strzałka w lewo: kierunek - 1
Strzałka w prawo: kierunek + 1

Nie patrzcie na to, że samochód się nie obraca (tzn. sprite samochodu). To zrobię później.
P-8168
« 1 » 2
  Strona 1 z 2 Następna strona