Autor Wątek: Edytor i siatka  (Przeczytany 2639 razy)

Offline X-Tech

  • Użytkownik

# Sierpień 17, 2010, 14:21:35
Postanowiłem sobie ułatwić zabawę i wymyślam edytor leveli do mojego shmupa.
Chcę na jednym elemencie edytora (ekranie mapy) zrobić siatkę - rozdzielczośc kafla 24x24.
Zależy mi na tym, aby jednym małym klockiem .bmp z narysowaną siatką wypełnić cały  ekran. Istnieje jakaś funkcja w allegro na automatyczne wypełnianie obrazka mniejszym ? Są inne, lepsze sposoby na siatkę ?


« Ostatnia zmiana: Sierpień 17, 2010, 14:31:21 wysłana przez X-Tech »

Offline Mr. Spam

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

Offline BrutalComputer

  • Użytkownik

# Sierpień 17, 2010, 14:33:08
Wielokrotne narysowanie obrazka pętlą for. ( dla prostego programu 2D )

Powinieneś rysować tylko to co jest na ekranie, bo blitowanie jest kosztowne. Jeżeli chodzi o poziomy, to obecne komputery mają gigabajty pamięci, a jeden poziom nie wyobrażam sobie żeby mógł zajmować więcej niż kilka-kilkanaście kilobajtów. Tak więc ładuj cały level do pamięci i się nie przejmuj.

EDIT: No dobrze, kompletnie mi się pochrzaniło :D Myślałem, że mapa z tilesów rozłożona na siatce ;D Na dosłowną siatkę nie wpadłem.
Na zwykłą siatkę uważam line za najlepsze rozwiązanie.
« Ostatnia zmiana: Sierpień 17, 2010, 18:14:17 wysłana przez BrutalComputer »

Offline DrUiD

  • Użytkownik
    • HaCra Team

# Sierpień 17, 2010, 14:34:51

Offline X-Tech

  • Użytkownik

# Sierpień 17, 2010, 14:46:57
No właśnie for to była moja druga opcja z tym for. Ciekawe jak to się sprawi jak będę za każdym razem po suwaniu po mapie musiał rysować tę siatkę na kafle pod spodem.

A więc do pamięci level. No właśnie chce na tilesetach te levele robić. Edytor zacząłem tworzyć już mniej więcej powoli aczkolwiek zaczyna przypominać edytor po lewo miejsce na tile, a na dole na opcje, z boku miejscówka na suwak w górę w dół.

DrUID. Całkiem spoko. Dzięki.


XD

Offline supron

  • Użytkownik

# Sierpień 17, 2010, 15:21:45

XD
Co tam pisze w lewym górnym rogu  ??? ???

Offline Rokuzo

  • Użytkownik
    • Masz na sprzedaż klucze do cs go?

# Sierpień 17, 2010, 15:35:36
Ew. zostaje narysować samemu w paincie mapkę lub wkleić jaką bitmapkę trawki czy coś.
-> Mamy tlo.bmp
Potem dodatkowo zrobić domek oraz bohatera jako inne bitmapki.
-> Mamy domek.bmp oraz bohater.bmp
Jest takie coś jak podwójne buforowanie, wyświetlanie bitmap jedną nad drugą itp.
-> Walimy wyświetl tlo.bmp a na tym tlo.bmp na odpowiedniej pozycji domek.bmp oraz bohater.bmp.

A i tak najlepiej do wyświetlania grafiki w grach 2d jest ta metoda kafelkowania. Dzisiejsze komputery nie mają maksymalnie 64 mb ram, dysków o pojemności 300 mb tylko kilkadziesiąt razy większe objętości/możliwości więc rysowanie co chwile kafelek, przechowywanie informacji o mapie kafelkowej itp to nie problem dla dzisiejszych komputerów.

Offline Ivian

  • Użytkownik
    • Ivian's Cave

# Sierpień 17, 2010, 20:39:42
Rokuzo - klepiesz bez sensu.
X - Tech - pomysl. Zbyt blachy problem. Dalbym Ci schemat ale nie mam dostepu do kompa.

Offline X-Tech

  • Użytkownik

# Sierpień 17, 2010, 21:13:51
Siatkę zrobiłem jasne. Wymyśliłem i to myślę całkiem dobrze.
Tak to wygląda. Będzie opcja on/off jej na guzik w kodzie już jest. Szkoda, że ta zmienna bool ciągle jest na true. Ustawiam ją na false przy inicjalizacji, ale i tak jest na true. Nie da się czegoś z tym zrobić ?
 
Teraz przystępuję do modelu tileset, mapa, wczyttileset, oraz to czego nie mogę się doczekać czyli przekładania, el. tileset na mapę, ale na to kod również już mam praktycznie wymyślony. Zero kursów na to sam wszystko wymyślam (jak na razie) łapcie:




a kod taki na to strzeliłem

void rysuj_siatke_mi() {
siatx1=0; siaty1=0;
        while (siaty1<432) {
    masked_blit(siatka,ekranik,0,0,siatx1,siaty1,siatka->w,siatka->h);
        siatx1+=24;
        if (siatx1>504) {siatx1=0; siaty1+=24;};

                            }
}





« Ostatnia zmiana: Sierpień 17, 2010, 21:20:04 wysłana przez X-Tech »

Offline Oti

  • Użytkownik

# Sierpień 17, 2010, 21:31:04
Zero kursów na to sam wszystko wymyślam (jak na razie)
Faktycznie masz powód do dumy...

a kod taki na to strzeliłem

void rysuj_siatke_mi() {
siatx1=0; siaty1=0;
        while (siaty1<432) {
    masked_blit(siatka,ekranik,0,0,siatx1,siaty1,siatka->w,siatka->h);
        siatx1+=24;
        if (siatx1>504) {siatx1=0; siaty1+=24;};

                            }
}
... a to jest już dzieło sztuki.

Offline X-Tech

  • Użytkownik

# Sierpień 17, 2010, 22:36:09

Jestem na etapie tworzenia klas tych wszystkich rzeczy, które stworzyłem tj. tileseta, ekranu, mapy i innych dupereli. Składają się one z obiektów - kafli, ale mam problem, bo chciałbym, aby w public: innych klas dać jako element składowy klasę pole_mapy czyli kafel o swoich własnościach.

class pole_mapy {
int x,y,id;
bool blok;
};



Kiedy robię tak:

class tileset {
pole_mapy[21][18];
};


dostaję komunikat, że pole_mapy nie jest rozpoznawane. Wyżej jest określona klasa pole_mapy z własnościami więc coś mi nie pasuje.



Drugie pytanko:

Z góry przewidziałem, że będę musiał zrobić skrypt na kolizję, ale żeby nie wpędzić się w maliny.
Czy na każde pole mapy (kafel) powinienem użyć 4 punktów określających każdy wierzchołek czy wystarczy jeden na środek każdego kafla, a potem sztuczne poszerzanie tych kafli na etapie badania kolizja czy akurat z kaflem coś się styka ? Która opcja jest lepsza ? Jedną czy drugą i tak jestem w stanie zrealizować, ale chciałem się upewnić.


« Ostatnia zmiana: Sierpień 17, 2010, 23:21:39 wysłana przez X-Tech »

Offline Rokuzo

  • Użytkownik
    • Masz na sprzedaż klucze do cs go?

# Sierpień 17, 2010, 22:42:05
Tak jak wolisz. Nie pisz tak by podobało się to innym (oczywiście gdy piszesz projekt w pojedynkę) lecz tak by było TOBIE wygodniej.

Co do kolizji. Ja korzystałem z innej trochę metody lecz uwagi Twojej godna nie jest.
Wybierając z tych dwóch technik ja bym wybrał ten pierwszy sposób.
« Ostatnia zmiana: Sierpień 17, 2010, 22:47:24 wysłana przez Rokuzo »

Offline X-Tech

  • Użytkownik

# Sierpień 17, 2010, 23:30:03
Wydaje mi się, że sposób oszczędza pamięć, ale czy na pewno jest prostszy.

Offline Oti

  • Użytkownik

# Sierpień 18, 2010, 00:02:06
Wybierając z tych dwóch technik ja bym wybrał ten pierwszy sposób.
Nie ma to jak podawać 4 współrzędne zamiast jednej.

Offline RedHot

  • Użytkownik

# Sierpień 18, 2010, 01:58:51
@X-Tech

Radzę uważać na to jak używasz '1' w nazwach. Często się myli z L, więc jeśli widzisz, że coś się święci reaguj w porę :P

Offline rhino

  • Użytkownik

# Sierpień 18, 2010, 15:24:24
Wybierając z tych dwóch technik ja bym wybrał ten pierwszy sposób.
Nie ma to jak podawać 4 współrzędne zamiast jednej.
Ja miałem jeszcze ciekawszy sposób, a mianowicie siatkę o tylu polach, ile pikseli ma mapa (tj. mapa 800x600px - siatka 800x600 elementów) i na ich podstawie sprawdzałem kolizje. :P
Kafle u mnie miały po 25x25px... Czyli według Ciebie da się zorganizować kolizje mając siatkę o tylu elementach, ile jest kafli? Ja tego próbowałem i nigdy nie mogłem sobie z tym poradzić.
« Ostatnia zmiana: Sierpień 18, 2010, 15:28:34 wysłana przez »Яђino »