Autor Wątek: Tworzenie Pocisków  (Przeczytany 2675 razy)

Offline .S.

  • Użytkownik

# Kwiecień 08, 2010, 15:14:12
Witam. Niedawno postanowiłem się zacząć bawić w robienie gier. Jestem jeszcze totalnym laikiem więc proszę o używanie jak najprostszych słów ;D

Otóż postanowiłem zrobić grę w rodzaju Space Invaders. Gracz ma statek i strzela do innych statków. Jednak mam problem z zagadnieniem dotyczącym strzelania. Pocisk to powinna być klasa z jakimiś tam swoimi zmiennymi, ale jak mam tworzyć kolejne te pociski? nie jestem w stanie przewidzieć ile gracz ich może wystrzelić. Domyślam się, że ma to jakiś związek z new i delete, ale na tym moje tropy się kończą...

Z góry dziękuję za odpowiedź.

Offline Mr. Spam

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

Offline siso

  • Użytkownik

# Kwiecień 08, 2010, 15:20:14
Najprościej jak można: ucz się programowania. Kiedy zdobędziesz jako takie podstawy, będziesz w stanie ogarnąć to, o co zapytałeś. Do tej pory postaraj się nie lamić.


Offline bies

  • Użytkownik

# Kwiecień 08, 2010, 15:22:45
(...) Domyślam się, że ma to jakiś związek z new i delete, ale na tym moje tropy się kończą...
Źle się domyślasz. New i delete to nie są zabawki dla początkujących i zapomnij na razie, że istnieją. Natomiast potrzebujesz jakiejś dokumentacji/książki/poradnika do STL a dokładniej do użycia std::vector<>.

Offline .S.

  • Użytkownik

# Kwiecień 08, 2010, 15:25:39
Najprościej jak można: ucz się programowania. Kiedy zdobędziesz jako takie podstawy, będziesz w stanie ogarnąć to, o co zapytałeś. Do tej pory postaraj się nie lamić.

aha...
jasne dzięki!

To nie jest tak, że wczoraj poznałem C++ i chcę zrobić grę. Siedzę w tym jakieś pół roku zrobiłem już kilka pseudo gier.
Po prostu nie wiem jak te wszystkie pociski tworzyć, przetwarzać i kasować na bieżąco.

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Kwiecień 08, 2010, 15:27:10
@up
Pół roku? Hmm albo kłamiesz albo ctrl+c/ctrl+v

Offline siso

  • Użytkownik

# Kwiecień 08, 2010, 15:35:45
To nie jest tak, że wczoraj poznałem C++ i chcę zrobić grę. Siedzę w tym jakieś pół roku zrobiłem już kilka pseudo gier.
Po prostu nie wiem jak te wszystkie pociski tworzyć, przetwarzać i kasować na bieżąco.
Wybacz zgryźliwość, ale jeśli te Twoje "pseudo gry" nie nauczyły Cię przez pół roku tego, o co pytasz, to po prostu musisz się tego jeszcze douczyć. Ot, taka błyskotliwa rada. A co, mam nie najgorszy humor dzisiaj.

Jeśli byś jednak nadal próbował się użalać, rada kolejna: siadaj do klawiatury, pisz, kompiluj, debuguj, googlaj, rozwiązuj problemy i dopiero jak natrafisz na jakiś trudno googlowalny, pytaj na forach. Pół roku "siedzenia w c++" jeszcze z nikogo nie zrobiło programisty. Czas, jaki spędzisz na poznawaniu podstaw na pewno nie będzie stracony.

Offline Meic

  • Użytkownik

# Kwiecień 08, 2010, 15:37:16
Sprawdź to http://www.warsztat.gd/projects.php?x=view&id=1258 (jest kod + "dokumentacja"). Jeśli chcesz uniknąć zabaw z przydzielaniem pamięci, to zawsze możesz zadeklarować tablice o x polach i w nich przechowywać dane. Jest to oczywiście rozwiązanie niezbyt eleganckie i ma ograniczenie do rzeczonych x pocisków na planszy na raz...

Offline .S.

  • Użytkownik

# Kwiecień 08, 2010, 15:51:00
Sprawdź to http://www.warsztat.gd/projects.php?x=view&id=1258 (jest kod + "dokumentacja"). Jeśli chcesz uniknąć zabaw z przydzielaniem pamięci, to zawsze możesz zadeklarować tablice o x polach i w nich przechowywać dane. Jest to oczywiście rozwiązanie niezbyt eleganckie i ma ograniczenie do rzeczonych x pocisków na planszy na raz...

Właśnie tego chcę uniknąć

(...) Domyślam się, że ma to jakiś związek z new i delete, ale na tym moje tropy się kończą...
Źle się domyślasz. New i delete to nie są zabawki dla początkujących i zapomnij na razie, że istnieją. Natomiast potrzebujesz jakiejś dokumentacji/książki/poradnika do STL a dokładniej do użycia std::vector<>.

Dobra dzięki. W ogóle o tym nie pomyślałem.


@up
Pół roku? Hmm albo kłamiesz albo ctrl+c/ctrl+v

Nigdy nie zetknąłem się z takim "wyzwaniem". Operowałem przez cały czas na tablicach, a o wektorze w ogóle nie pomyślałem.

W każdym razie dzięki za pomoc.

Offline Meic

  • Użytkownik

# Kwiecień 08, 2010, 16:47:52
Właśnie tego chcę uniknąć

Zabaw z pamięcią, czy ograniczeń tablicy ?

Mówiąc "bawienie się z pamięcią" miałem na myśli dynamicznie tworzone kolejki (to nie jest znowu takie skomplikowane), natomiast jeśli się nie mylę to new i delete są funkcjami do operowania na obiektach (to już jest skomplikowane  ;)). Tak więc rada biesa nie dotyczyła kolejek  :), a są one dość przydatne.

Co do tablicy i ograniczonej ilości pocisków, to mając prędkość kuli i szerokość (wysokość ?) ekranu możesz obliczyć maksymalną ilość możliwych pocisków wystrzelonych przez gracza ( i widocznych na ekranie). Tak, że ten sposób, mimo że prymitywny nie musi wcale ograniczać grywalności...

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Kwiecień 08, 2010, 17:09:07
Sprawdź to http://www.warsztat.gd/projects.php?x=view&id=1258 (jest kod + "dokumentacja"). Jeśli chcesz uniknąć zabaw z przydzielaniem pamięci, to zawsze możesz zadeklarować tablice o x polach i w nich przechowywać dane. Jest to oczywiście rozwiązanie niezbyt eleganckie i ma ograniczenie do rzeczonych x pocisków na planszy na raz...
To jest eleganckie.

Offline Kos

  • Użytkownik
    • kos.gd

# Kwiecień 08, 2010, 17:27:48
Ale nadal nie tak eleganckie jak vector::reserve(). :)

Offline Mazzir

  • Użytkownik

# Kwiecień 11, 2010, 13:16:16
Jeżeli zostanie wciśnięty klawisz odpowiedzialny za strzał to twórz obiekt/ładuj grafikę i przemieść ja w stronę w którą jest skierowany statek i jeżeli nastąpi kolizja z innym statkiem to zniszcz go i dodaj punkty.

Offline Oti

  • Użytkownik

# Kwiecień 11, 2010, 13:18:15
Jeżeli zostanie wciśnięty klawisz odpowiedzialny za strzał to twórz obiekt/ładuj grafikę i przemieść ja w stronę w którą jest skierowany statek i jeżeli nastąpi kolizja z innym statkiem to zniszcz go i dodaj punkty.
Ładować grafikę podczas gry? W większości przypadków nie ma to najmniejszego sensu.

Offline MichalBe

  • Użytkownik
    • MichalBe's Github

# Kwiecień 11, 2010, 13:39:20
Jeżeli zostanie wciśnięty klawisz odpowiedzialny za strzał to twórz obiekt/ładuj grafikę i przemieść ja w stronę w którą jest skierowany statek i jeżeli nastąpi kolizja z innym statkiem to zniszcz go i dodaj punkty.
Ładować grafikę podczas gry? W większości przypadków nie ma to najmniejszego sensu.

nie kłuć się z administratorem:)

Offline Charibo

  • Redaktor

# Kwiecień 11, 2010, 14:24:25
Jeżeli zostanie wciśnięty klawisz odpowiedzialny za strzał to twórz obiekt/ładuj grafikę i przemieść ja w stronę w którą jest skierowany statek i jeżeli nastąpi kolizja z innym statkiem to zniszcz go i dodaj punkty.
Ładować grafikę podczas gry? W większości przypadków nie ma to najmniejszego sensu.
Bullshit :)