Autor Wątek: Strzelanie w 4 kierunkach.  (Przeczytany 2184 razy)

Offline wahito

  • Użytkownik

# Listopad 06, 2010, 16:56:02
Robiliście może strzelanie w 4 kierunkach.
W internecie idzie znaleść tylko strzelanie w jednym kierunku.

Rzucie jakimś psedokodem albo kodem  żebym mógł przestudiować.
Moje sterowanie to standardowe lewo, prawo, góra, dół.



Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Redaktor

# Listopad 06, 2010, 17:01:37
Zależnie od kierunku, w którym wystrzelono pocisk, zmieniasz odpowiednią współrzędną: jeśli w górę, zmniejszasz y, jeśli w prawo, zwiększasz x itd.

Offline ANtY

  • With fury and fire
  • Użytkownik
    • ANtY

  • Zbanowany
# Listopad 06, 2010, 17:07:07
przy tworzeniu pocisku w argumencie konstruktora podawaj kierunek

CBullet* bullet = new CBullet( 1 );
w update pocisku np:

switch( direction )
{
  case 1: y++; break;
  case 2: y--; break;
  case 3: x++; break;
  case 4: x--; break;
}

Offline Xirdus

  • Redaktor

# Listopad 06, 2010, 17:09:02
@ANtY

Lepiej x += bullet.speed;

Offline ANtY

  • With fury and fire
  • Użytkownik
    • ANtY

  • Zbanowany
# Listopad 06, 2010, 17:18:19
@ANtY

Lepiej x += bullet.speed;
To był tylko przykład. Zresztą w update pocisku nie musisz chyba pisać bullet. , hm?

Offline Avaj

  • Użytkownik

# Listopad 06, 2010, 17:22:13
@ANtY

Lepiej x += bullet.speed;
nie bo lepiej x+= bullet.speed * deltatime;

Offline Xirdus

  • Redaktor

# Listopad 06, 2010, 17:24:58
nie bo lepiej x+= bullet.speed * deltatime;
Nie, bo lepiej fixed timestep.

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Listopad 06, 2010, 17:41:01
Nie, bo lepiej fixed timestep.
Tiaaa, nie ma to jak delta do rendera, fixed do fizyki...
a potem pierniczenie się z łączeniem tego..

Najlepiej:
Asynchronicznie -> logika
Synchronicznie -> input
Na delcie -> grafika
Fixed step -> fizyka
A no i innych wątkach.


« Ostatnia zmiana: Listopad 06, 2010, 17:56:13 wysłana przez świrus »

Offline mwojt

  • Użytkownik

# Listopad 06, 2010, 17:52:14
a nie lepiej:
  pozycja_pocisku_x+=cos(kat_strzelania)*predkosc;
  pozycja_pocisku_y+=sin(kat_strzelania)*predkosc;

i można strzelać w dowolnym kierunku, aby uniknąć problemów początkującego raczej używać zmiennych typu float.

Offline wahito

  • Użytkownik

# Listopad 07, 2010, 21:02:33
Dzieki za odpowiedzi już wczoraj widziałem że było ich sporo ale musiałem przemysleć wasze podpowiedzi.
C++ ucze się od sierpnia wiec mam problem z tworzeniem różnych warunków dlatego łatwiej mi przestudiować jakiś gotowy kod.
Sin i cos narazie odpada jak pisałem mam standardowe sterowanie (key[KEY_DOWN], key[KEY_LEFT] itp.)
plus animacja i proste kolizje no i teraz brak mi strzelania.
W jednym kierunku potrawfie strzelać ale skąd komputer ma wiedzieć w jakim kierunku jestem obrócony.
I tu jest problem.


http://www.youtube.com/watch?v=NHkpt0ExzH4&feature=mfu_in_order&list=UL
« Ostatnia zmiana: Listopad 07, 2010, 22:38:59 wysłana przez wahito »

Offline Xirdus

  • Redaktor

# Listopad 07, 2010, 21:12:52
W jednym kierunku potrawfie strzelać ale skąd komputer ma wiedzieć w jakim kierunku jestem obrócony.
Trzeba to zapisać w zmiennej. Zrób enuma z kierunkami, w klasie gracza zrób pole kierunek i przy ruchu ustawiaj odpowiednio jego wartość. Potem przy strzelaniu zapisuj kierunek przy wystrzale (najlepiej w polu klasy pocisku) i przy updacie fizyki przesuwaj pociski w tą stronę, jaka jest określona w polu danego pocisku.

Offline szatkus

  • Użytkownik
    • site

# Listopad 07, 2010, 23:11:08
Jeśli chcesz, żeby gracz mógł iść w jednym kierunku, a strzelać w innym to zaangażuj myszkę, a jeśli chcesz coś prostszego to zrób osobne klawisze dla strzelania w każdym kierunku (np. strzałki do chodzenia, wsad do strzedlania).

Offline Anton Chigurh

  • Użytkownik

# Listopad 08, 2010, 00:25:50
nie bo lepiej x+= bullet.speed * deltatime;
Nie, bo lepiej fixed timestep.
w fixed timestep też jest delta time, tyle, ze jest "fixed" ;-)

a nie lepiej:
  pozycja_pocisku_x+=cos(kat_strzelania)*predkosc;
  pozycja_pocisku_y+=sin(kat_strzelania)*predkosc;

i można strzelać w dowolnym kierunku, aby uniknąć problemów początkującego raczej używać zmiennych typu float.
super, ale wartoby te sinusy i cosinusy policzyć raz, przy generowaniu pocisku i przetłumaczyć na dx i dy a potem co klatkę już tylko dodawać a nie znów w kółko trygonometria ;-)

Offline Oti

  • Użytkownik

# Listopad 08, 2010, 09:27:25
super, ale wartoby te sinusy i cosinusy policzyć raz, przy generowaniu pocisku i przetłumaczyć na dx i dy a potem co klatkę już tylko dodawać a nie znów w kółko trygonometria ;-)
Dokładnie, warto przy tworzeniu pocisku ustalić jego wektor ruchu i co klatkę dodawać go do pozycji, żeby nie trzeba było robić dzikich ifów jak zaproponował ANTy.