Autor Wątek: Strzelanie.  (Przeczytany 2641 razy)

Offline HellCat

  • Użytkownik

# Kwiecień 18, 2006, 15:04:49
Czesc.

Przez swieta nudzilo mi sie i napisalem sobie takiego prostego lapacza klockow w samym WinAPI  :)
(klocki leca z gory na dol a naszym zadaniem jest lapanie ich .. od taka prosta gierka :) opisana juz chyba na milon sposobow w jeszcze wiekszej ilosci tutoriali ;) )

Na drugi dzien chcialem troche ulepszyc moja gre, chcialem dodac strzelanie, zeby nie lapac klockow a je zestrzeliwywyac.

I troche nie wiem jak sie za to zabrac :|
Tzn. nie wiem jak ogarnac te wszystkie wystrzelone pociski .. zakladajac ze gracz bedzie mogl wystrzelic kilkadziesiat pociskow na sekunde ... Boje sie ze zapamietywanie wszystkich pocisko, przesowanie ich po kolei i sprawdzanie kolizji z klockiem (przeciwnik), lub gorna krawedzia ekranu (zeby zniszczyc pocisk) troche zagmatwa wszystko i moze zwolnic powaznie ;)

Ale generalnie nie wiem troche jak to wszystko poukladac sobie...
Myslalem, po koleii kazdy pocisk (po wystrzeleniu=>stworzeniu) dopisywac do listy, a potem leciec pokolei po calej liscie i sprawdzac/rysowac co trzeba ... Ale czy to bedzie w miare poprawne .. tzn czy tak zrobilby profesjonalista ? :)

myslalem zrobic to tak (alg. dzialania mojej petli glownej gry):
Pseudo kod.
{
  SprawdzKlawiature(); // zmiana wsp gracza i sprawdzenie czy "strzelil" ;)
  SprawdzKolizje(); // najpierw sprawdzam po kolei wszystkie pociski, potem kolizje klocka  z graczem - bez skojarzen :P
  UaktualnijObraz(hWnd); // rysowanko
  Sleep(30); // ech ;)
}


Moze ktos mial podobny problem jak ja i poradzil sobie z nim w jakis elegancki sposob ? :)

Pzdr.

Offline Mr. Spam

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

Offline Silther

  • Użytkownik

# Kwiecień 18, 2006, 15:13:01
Tylko po co ci klkadziesiąt pocisków na sekundę, jakbym ja takie coś pisał to 3-5 pociski na sekundę by wystarczyły. Potem wrzucałbym je do tablicy (jak chcesz mieć pro to zrób listę powiązaną :D) i obsługiwał po kolei. Pociski lecą szybko, więc tablica może być mała. Pocisk w coś trafia/wylatuje za planszę to zwalniamy miejsce w tablicy/kasujemy element listy połączonej.

Offline shyha

  • Użytkownik
    • Shyha@Flickr

# Kwiecień 18, 2006, 15:15:29
Myslalem, po koleii kazdy pocisk (po wystrzeleniu=>stworzeniu) dopisywac do listy, a potem leciec pokolei po calej liscie i sprawdzac/rysowac co trzeba ... Ale czy to bedzie w miare poprawne .. tzn czy tak zrobilby profesjonalista ? :)
Tak :)

edit: tak zrobiłem w jednym wygaszaczu. Od cholery tego tam lata (full software rendering :D) : FlaresSaver

edit2: chociaż nie, teraz mi się wydaje, że jednak na tablicach. W zasadzie to nic nie zmienia. Jak co to gdzieś tam źródła do tego mam, choć piękne nie są ;)
« Ostatnia zmiana: Kwiecień 18, 2006, 15:29:35 wysłana przez shyha »

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Kwiecień 18, 2006, 15:21:23
Tak, o ile tych obiektów nie są tysiące. Jeśli są, to do sprawdzania kolizji przydałaby się złożoność logarytmiczna, a nie liniowa, a to wymaga trzymania elementów w jakiś sposób posortowanych i w przypadku gier nazywa się to podziałem przestrzeni - poszukaj o pojęciach takich jak BSP czy OctTree.

Offline HellCat

  • Użytkownik

# Kwiecień 19, 2006, 14:04:34
Tak, o ile tych obiektów nie są tysiące. Jeśli są, to do sprawdzania kolizji przydałaby się złożoność logarytmiczna, a nie liniowa, a to wymaga trzymania elementów w jakiś sposób posortowanych i w przypadku gier nazywa się to podziałem przestrzeni - poszukaj o pojęciach takich jak BSP czy OctTree.
Nie nie bedzie tysiecy obiektow. Wiec chyba zrobie liste, albo po prostu tablice.
Gierka toczy sie w okienku windows i raczej gracz nie bedzie mial mozliwosci wystrzelenia az takiej duzej ilosci pociskow w tak krotkim czasie zeby nie wylecialy za plansze, lub nie trafily celu.

Pzdr.