Autor Wątek: Grafika na bitmapach  (Przeczytany 3584 razy)

Offline Shlizer

  • Użytkownik

# Marzec 04, 2009, 21:32:48
właśnie cała sztuka polega na tym, że można =p

zobacz http://stud.wsi.edu.pl/~sistudem/Grafika/MAPOrt.html .. może coś wyjaśni..

Offline Mr. Spam

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

Offline cybek

  • Użytkownik
    • Strona domowa!

# Marzec 04, 2009, 22:23:17
Koledze chyba chodziło piksele, tak?
No tak, ekran jest na nie podzielony, a wyświetla się na połowie ich używając float, który jest zaokrąglany do inta i wyświetlany.
A postać może wolniutko się przesuwać po 0,001 piksela.
Pozdro

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Marzec 05, 2009, 08:29:42
jezeli chcesz to moge ci dac gotowa biblioteke to programowanie gier 2d zrobiona w OpenGL autorstwa mojego kolegi Moja Supra uzywa tego do GUI
8168787 moje  gg bardzo prosta w obsludze bardzo podobna do allegro i masz akceleracje :p

Offline Ju1ian

  • Użytkownik

# Marzec 05, 2009, 15:21:28
Dokładnie tak, jest mapa tworzona na kafelkach i jak wciśniesz klawisz to "kamera" przesuwa się o jeden kafelek ;)

Offline Trok

  • Użytkownik

# Marzec 05, 2009, 17:23:28
@Ju1ian,
Mówisz, że kamera przesuwa się u Ciebie nad ludzikiem, czyli ludzik nie znajduje się zawsze na środku ekranu.
Ja chciałbym, żeby ludzik był zawsze na środku, czyli jak gdzieś idę to kamera stoi w miejscu, tylko mapa pod ludzikiem się przesuwa.

Problem w tym, że cały czas nie rozumiem jak mam płynnie przesunąć tą mapę.
Jeżeli ekran jest podzielony na kwadraty, to jak mam przesunąć ekran nie o cały kwadrat, tylko o 1 piksel (żeby było jak najpłynniej)?

Offline cybek

  • Użytkownik
    • Strona domowa!

# Marzec 05, 2009, 17:56:02
pokaż_mapę(x_mapy-5, y_mapy-5) ?

Offline Ju1ian

  • Użytkownik

# Marzec 05, 2009, 18:40:09
Zawsze jest na środku! A jak przesuwasz to o kafel to jest płynnie - zapewniam cię.

Offline Trok

  • Użytkownik

# Marzec 05, 2009, 20:43:01
Ale jak ty to zrobiłeś?  :P
Przecież jeżeli ludzik jest na 1 kratce a na 2 jest trawa, i nagle ustawiam że na 1 jest trawa a na 2 ludzik, to chyba logiczne, że ludzik pojawi się nagle na 2 kratce, nie będzie płynnego przejścia...

Offline Mrowa

  • Użytkownik

# Marzec 05, 2009, 21:15:34
Ja bym to rozwiązał tak, że to co jest pod ruchomymi obiektami jest osobno(ziemia, przedmioty leżące na niej itp.), a na tym rysujesz sobie postać. I teraz po prostu jak przesuwasz kafel z postacią, to robisz to w sposób płynny. Wciskasz sobie strzałkę np. w górę i wtedy przesuwasz współrzędne tego kafla z postacią płynnie, jak przejdziesz cały kafel to wyrównujesz współrzędne.

Coś takiego w pseudokodzie:
struct Postac{
         int x, y;     // na jakim kaflu jestem
         float wspLewegoDolnegoRoguZdjeciaPostaci;
         // ...
          }

// I poruszanie się np. w górę
if( mapa[postac.x][postac.y + 1].ID == 0) // 0 oznacza, że nie ma na kaflu żadnej przeszkody
{
     static float ilePrzesunieto = 0.0f;
     ilePrzesunieto = prędkość * czasKlatki;
     wspLewegoDolnegoRoguZdjeciaPostaci += ilePrzesunieto;
     if(ilePrzesunieto >= rozmiarKafla)
     {
            // Pasowało by wyliczyć ponownie dokładne położenie tego kafla co się ruszał, bo mogą wyjść małe przekłamania
            // { ... }
           
            // aktualizacja ID kafelków
            mapa[postac.x][postac.y + 1] = ID_gracza;
            mapa[postac.x][postac.y] = 0;

            ilePrzesunieto = 0.0f;
     }
}


Bla bla bla, nie chce mi się tego pisać, myślę, że z tego kawałka ogólnie wyczaisz o co mi chodzi. Ale czy jest to dobry sposób to nie wiem. Ja podobnego sposobu użyłem to reprezentacji obiektów na planszy w grze logicznej i nie narzekam.


Offline .:NOXY:.

  • Użytkownik
    • Profil

# Marzec 09, 2009, 13:02:16
zasda takiego przesuniecia jest prosta owszem ruzyjesz np kafelki z dokldnoscia do pixela i o tyle je przsuwasz czyli np jak kafel ma 32x32 to pelne przesuniecie nastepuje po 32 pixelach i wtedy pierwszy kafel znika a ostani sie pojawia cala zabawa polega na tym zeby rysowac o jedna linijke kafli iwecej w prawo i w dol za ekranem tak jakby jak sobie przypomne algorytm to ci napisze ale to dzila mniej wiecej tak:

map_x++; //przesuwamy o 1pix
map_y;

tiles
  • [y]; //to np przechowuje jakie tile rysowac


draw_x = tiles
  • [y].x + map_x;

x = draw_x/32;

na takiej mniej wiecej zasadzie czyli tak naprawde ekran sie przesuwa tablica rysowania ale przeskakuje fizycznie po 32 pixelach ale tego nie widac minus tego jest taki ze masz plynne przesuniecie lae fizycznie trablica nie do konca sie zgadza z tym co widac bo dodajesz swoje przesuniecie tak jakby ale tak jak mowie znajde to ci podesle bardzo dobrze sie to u mnie sprawdzalo w LifeStone