• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tor lotu pocisku wystrzelonego ze statku w grze 2D

0 głosów
536 wizyt
pytanie zadane 26 czerwca 2017 w C i C++ przez michal06011997 Nowicjusz (210 p.)
Witam! Napotkałem problem podczas tworzenia gry 2D, która polega na ruszaniu się statkiem i celowaniu w przeciwników. Stanąłem przy wystrzale pocisku ze statku, mianowicie: pocisk (wizualnie) zostaje wystrzelony ze statku, jednak (tu jest problem) kiedy ruszam statkiem pocisk leci do przodu ale porusza się na boki tak samo jak statek. Czyli pobieram do pocisku tylko 1 współrzędną ze statku, która jest cały czas aktualizowana. Czy jest sposób, w który da radę tę współrzędną "usztywnić" ? Piszę to w C++ Builderze 6. Z góry dziękuję za odpowiedzi i przepraszam jeżeli przeoczyłem gdzieś już taki temat lub nie znalazłem odpowiedzi na moje pytanie w innym temacie. Pozdrawiam.
komentarz 26 czerwca 2017 przez jkdfklgdf Nałogowiec (32,020 p.)
C++ builder... naucz się może biblioteki graficznej może Sdl?
komentarz 26 czerwca 2017 przez niezalogowany
W czasie wystrzelenia pobierz tą konkretną składową prędkości. Nie pobieraj jej po tym gdy już leci.
komentarz 26 czerwca 2017 przez michal06011997 Nowicjusz (210 p.)
edycja 26 czerwca 2017 przez michal06011997

Nie jestem pewien czy mówimy o tym samym sad Animacje lotu pocisku aktywuję za pomocą spacji. 

void __fastcall TForm1::Timer_pociskmTimer(TObject *Sender)
{
        pozycja=spaceship->Left;

        if(p==1)
        {
        p1->Visible=true;

                 if(lec<=50)
                 {
                        p1->Left = pozycja;
                        p1->Top-=10;
                        lec--;

                 }

        }
}

Pobrałem ją przy naciśnięciu spacji. Mam tu jakiś błąd w rozumowaniu dalej? p1 to jest mój pocisk.
Rozumiem, że propozycja tej biblioteki niesie za sobą porzucenie C++ Buildera?

1
komentarz 26 czerwca 2017 przez niezalogowany
edycja 26 czerwca 2017

Rzeczywiście trochę inaczej sobie to wyobrażałem. W każdym kroku czasowym pobierasz nowe położenia takie same jaki aktualnie ma statek. Pobieraj tylko raz w momencie strzału (możesz zrobić funkcję strzał, która nada położenie i predkosc). Wtedy w timerze będziesz miał coś takiego: 

void __fastcall TForm1::Timer_pociskmTimer(TObject *Sender)
{
        pozycja=spaceship->Left;
 
        if(p==1)
        {
        p1->Visible=true;
 
                 if(lec<=50)
                 {
   
                        p1->Top -= predkosc_pocisku_y; // lub predkosc_pocisku_y*dt  - gdzie dt krok czasowy
                        lec--;
 
                 }
 
        }
}

C++ Builder jest trochę toporny i raczej nie jest łatwo w nim robić gry. Porzucenie go jest konieczne jeżeli chcesz wynieść jakieś doświadczenie i naprawdę coś zrobić w miarę łatwo - możesz wybrać np. SFML, SDL. Jednak proponuję poćwiczyć trochę programowanie obiektowe, bo np taki statek czy pocisk powinny być osobnymi obiektami ;) 

komentarz 26 czerwca 2017 przez michal06011997 Nowicjusz (210 p.)

Dzięki wielkie, udało się laugh Robiłem również błąd próbując to wcisnąć do zegara od animacji lotu pocisku zamiast do OnKeyDown ze spacją :)

komentarz 26 czerwca 2017 przez jkdfklgdf Nałogowiec (32,020 p.)
p1.

p1 to wskażnik i nigdy nie będzie równy 1 zrób w tym if'ie if(*p1==1)
komentarz 26 czerwca 2017 przez michal06011997 Nowicjusz (210 p.)

Tam jest p==1 a nie p1==1 laugh

komentarz 26 czerwca 2017 przez jkdfklgdf Nałogowiec (32,020 p.)
a p to zmienna wskaźnikowa czy normalna?
komentarz 27 czerwca 2017 przez michal06011997 Nowicjusz (210 p.)
Zwykła zmienna,  jest to numer pocisku.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
4 odpowiedzi 762 wizyt
pytanie zadane 9 grudnia 2015 w Algorytmy przez Adriqun Początkujący (290 p.)
0 głosów
0 odpowiedzi 365 wizyt
0 głosów
1 odpowiedź 1,001 wizyt
pytanie zadane 3 stycznia 2021 w C i C++ przez michal100032 Początkujący (390 p.)

93,800 zapytań

142,768 odpowiedzi

323,461 komentarzy

63,421 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...