Do spisu
modułów
2.3. Moduł
ObrazPlanszy
-
- 2.3.3.1. ObrazPlanszyAbs
- 2.3.3.6. ObrazElementuSwiata i
jej podklasy
Osoby pracujące
nad modułem
|
Autor: |
Michał Żmijewski |
|
|
Weryfikator: |
Anna Doroś |
|
|
Tester: |
Damian Wójtowicz |
|
Opis stałych i
typów nieobiektowych
patrz:
#include <stale_ObrazPlanszy.h>
Poczatek
Klasa ObrazPlanszyAbs
- ObrazPlanszyAbs jest klasą abstrakcyjną
(należy w podklasach zdefiniować
metodę odbierzImpuls) - podklasą
QObject.
Odwoluje sie do klas Plansza i
ObrazTerenu oraz do bibliotek: libSprite
i Qt.
Jest odpowiedzialna za wizualizację
planszy wirtualnej, a dokładnie tylko
terenów w niej opisanych (tworzy ich
rysunki). Rysunki terenów mogą być
domyślne tzn. ich faktura jest
wewnętrznie zdefiniowana, lub podane za
pomaca pliku format najlepiej ppm dla
rysunku własciwego, pbm dla maski.
Klasy dziedziczace magą na bierząco
śledzić i uaktualniać rysunek
terenów. Znajdują się tu odpowiednie
narzędzia. Należy jedynie zdefiniować
metodę odbierzImpuls (obecnie w pełni
wirtualna).
Obiekt z podklasy dzidziczącej z tej
klasy to widget posiadający scroollbary,
będące RozaWiatrow (klasa zadeklarowana
poniżej).
Można w nim śledzic myszkę.
- Funkcje
publiczne
- ObrazPlanszyAbs(const
char*,Plansza&,QWidget*
parent=0,const char* name=0,WFlags f=0)
- ObrazPlanszyAbs(char*,char*,char*,Plansza&,QWidget*
parent=0,const char* name=0,WFlags f=0)
- QwSpritePixmapSequence* animacja(typ_teren
rodz)
- QPoint wspNaObrazie(QPoint)
Sloty
publiczne
Atrybuty
obiektowe chronione
|
- referencja
na planszę wirtualna |
|
- obiekt klasy
PowierzcniaPlanszy, na nim będą
rysowane obrazki sprite'y |
|
- ewentualny wczytany
rusunek planszy tzn. faktura terenów |
|
- kolekcja masek mask
do wczytanych terenów tzn. są to
dodatkowe maski nakładane na już
istniejące terenów |
|
- kolekcja standardowych animacji
terenów, (tereny z jedną klatką nie
są animowane patrz. opis klasy
ObrazTerenu. Standardowe animacje są
używane przy dodawaniu nowych terenow
lub gdy nie został podany plik z
rysunkiem planszy |
|
- kolekcja obiektów klasy
ObrazTerenu odpowiedzialnych za
wyświetlanie rysunków danego terenu lub
ich animacji |
|
- współrzedne kursora myszki
względne w tym widgecie |
Opis metod prywatnych patrz plik ObrazPlanszyAbs.h
- ObrazPlanszyAbs::ObrazPlanszyAbs(const
char*,Plansza&,QWidget*
parent=0,const char* name=0,WFlags f=0)
- Dostaje nazwę pliku z tłem dla planszy,
referencję do planszy, i reszta tak jak
dla widgetów w Qt.
- ObrazPlanszyAbs::ObrazPlanszyAbs(char*,char*,char*,Plansza&,QWidget*
parent=0,const char* name=0,WFlags f=0)
- Dostaje nazwę pliku z tlem dla planszy,
nazwę pliku z rysunkiem planszy, maskę
do tego rysunku (formaty odpowiednio
PPM,PBM), referencję do planszy. W
przypadku braku pliku z rysunkiem nazwa
powinna mieć w pierwszym polu
znacznikkońca napisu '\0'.
- QwSpritePixmapSequence*
ObrazPlanszyAbs::animacja(typ_teren rodz)
- Udostępnia animacje terenu .rodz'.
- QPoint
ObrazPlanszyAbs::wspNaObrazie(QPoint)
- Przekształca względne współrzędne
punktu na bezwzględne.
- ObrazPlanszyAbs::odbierzImpuls() [abstrakcyjny]
- Należy go zdefiniowac w podklasach.
- ObrazPlanszyAbs::odbierzImpulsPauza()
[abstrakcyjny]
- Można go przedefiniowac w podklasach.
- ObrazPlanszyAbs::zdjecie(char*)
- Zapisuje aktualny rysunek planszy do
zadanego pliku.
Poczatek
Klasa PowierzchniaPlanszy
- Klasa pomocnicza klasy ObrazPlanszyAbs.
- PowierzchniaPlanszy - obiekt tej klasy
stanowi powierzchnie na której są
wyświtlane elementy świata - sprite'y.
Jest to podklasa QwImageSpriteField
wewnętrznej klasy biblioteki libSprite.
Klasa abstrakcyjna - jest
nad klasą wszystkich elementów świata
oprócz terenu.
- Funkcje
publiczne
- PowierzchniaPlanszy::PowierzchniaPlanszy(QPoint
rozmiar,int chunksize=16,int
maxclusters=100)
- Dostaje rozmiar planszy graficznej.
- PowierzchniaPlanszy::PowierzchniaPlanszy(const
char*,QPoint rozmiar,int chunksize=16,int
maxclusters=100)
- Jak wyżej, ale dodatkowo dostaje nazwę
pliku z tłem. Może być pusty string.
Dopuszczalne formaty plików z tłem to
PBM,GIF,PPM,PBM.
-
Poczatek
Klasa RozaWiatrow
- Klasa pomocnicza klasy ObrazPlanszyAbs.
- Jest to klasa pomocnicza wewnętrzna
klasy Obraz, jest to windget zawierajacy
"scrollbary" obrazu.
-
Poczatek
Klasa Obraz
- Klasa pomocnicza klasy ObrazPlanszyAbs.
Jest to wewnętrzny widget ObrazuPlanszyAbs
zawierający powierzchnie planszy oraz
rozeWiatrow jako scrollbary.
#include <ObrazPlanszyAbs.h>
Funkcje
publiczne
- Obraz(QwSpriteField*
viewing=0, QWidget* parent=0, const char*
name=0, WFlags f=0)
- QPoint wspNaObrazie(QPoint)maxclusters=100)
- void save()
- void save(const
char*)
Sloty
-
Opis metod prywatnych patrz plik
ObrazPlanszyAbs.h
- Obraz::Obraz(QwSpriteField*
viewing=0, QWidget* parent=0, const char*
name=0, WFlags f=0)
- Konstruktor dostaje powierzchnię
planszy.
- QPoint
wspNaObrazie(QPoint)maxclusters=100)
- Zwraca współrzędne bezwzględne na
rysunku planszy.
- void Obraz::save()
- Zapisuje rysunek całej planszy do pliku
../obrazki/plansza.png.
- void Obraz::save(const char*)
- Zapisuje rysunek całej planszy do pliku
o nazwie będącej parametrem.
- void Obraz::_vScroll(int)
- Przesuwa w pionie wyświetlany fragment o
zadaną ilość.
- void Obraz::_hScroll(int)
- Przesuwa w poziomie wyświetlany
fragment.
Poczatek
-
Klasa PlanszyObraz
- Klasa ta w stosunku do swojej nadklasy
ObrazPlanszyAbs posiada dodatkowo możliwość
wyświetlania elementów świata. Odwoluje się
do klasy ObrazElementuSwiata oraz do modułu
ElementySwiata.
- Posiada kolekcję obiektów obrazujących
elementy świata które ma
pokazywać(ObrazeElementuSwiata).
- Zdefiniowana jest w niej obsługa kursora
pokazującego ruszający się obiekt obrazujący
zadany element świata.
-
-
-
- Funkcje
publiczne
- Konstruktory są analogiczne do
występujacych w nadklasie
ObrazPlanszyAbs
- void pobierzAnimacjeElementowSwiata(QWMatrix
macierzSkali,QWMatrix macierzOdbicia)
Sygnały
Sloty
- void odbierzImpuls()
- void odbierzImpulsPauza()
- void nieMaMyszki()
- void dodajElementSwiata(Wejscie*
), void dodajElementSwiata(Wyjscie*
), void dodajElementSwiata(Leming*
), void dodajElementSwiata(Bloker*
), void dodajElementSwiata(SchodkarzGorny*
), void dodajElementSwiata(SchodkarzDolny*
), void dodajElementSwiata(SchodkarzPoziomy*
), void dodajElementSwiata(KopaczPoziomy*
), void dodajElementSwiata(KopaczPionowy*
), void dodajElementSwiata(KopaczSkosnyWGore*
), void dodajElementSwiata(KopaczSkosnyWDol*
), void dodajElementSwiata(Bomba*)
- void usunElementSwiata(ElementSwiata*
)
- void kursorRodzaj(typ_rodzaj)
Atrybuty
obiektowe
|
- kolekcja
animacji elementów świata w
poszczególnych stanach |
|
- kolekcja obrazów
elementów świata indeksowana tymi
elementami |
|
- wskaźnik na obiekt
klasy obrazElementuSwiata pracujący w
trybie kursora |
- void
pobierzAnimacjeElementowSwiata(QWMatrix
macierzSkali,QWMatrix macierzOdbicia)
- Pobiera animacje elementów świata w
poszczególnych stanach
- void wyswietl()
- Odbierają go obrazy elementów swiata.
- void wcisnietyKursor(Para,int)
- Jest wysyłany do interfejsu jesli jest
włączona obsługa kursora i prawy
przycisk myszy został wciśniety.
- void odbierzImpuls()
- Odświerza rysunek tzn. rysuje elementy
świata, aktualizuje teren, ewentualnie
scrolluje itp.
- void odbierzImpulsPauza()
- Odświerza rysunek podczas pauzy, nie
jest wysyłany sygnał do elementów
świata by się przerysowały w nowych
pozycjach. Są rysowane w starych.
- void nieMaMyszki()
- Kursor jest poza widgetem.sloty dodajace
obrazy zadanych elementów:
- void dodajElementSwiata(Wejscie*
), void dodajElementSwiata(Wyjscie* ),
void dodajElementSwiata(Leming* ), void
dodajElementSwiata(Bloker* ), void
dodajElementSwiata(SchodkarzGorny* ),
void dodajElementSwiata(SchodkarzDolny*
), void
dodajElementSwiata(SchodkarzPoziomy* ),
void dodajElementSwiata(KopaczPoziomy* ),
void dodajElementSwiata(KopaczPionowy* ),
void
dodajElementSwiata(KopaczSkosnyWGore* ),
void dodajElementSwiata(KopaczSkosnyWDol*
), void dodajElementSwiata(Bomba*)
- Sloty dodające obrazy zadanych
elementów.
- void
usunElementSwiata(ElementSwiata* )
- Usuwanie obrazu elementu świata.
- void kursorRodzaj(typ_rodzaj)
- Włączenie kursora obrazującego dany
element świata.
Poczatek
Klasa ObrazTerenu i jej podklasy
Jest to klasa
abstrakcyjna posiadająca następujące podklasy (wg
hierarchii):
ObrazTerenu
ObrazTerenuDomyslny
ObrazTerenuZPixmapy
Są to klasy obiektów będących
wizualizacją poszczególnych rodzajów
terenów.Obiekty tych klas zarządzaja sprite'ami
zadanego terenu.
#include
<ObrazTerenu.h>
ObrazTerenuDomyslny
w konstruktorze dostaje sekwecje klatek z rysunkami.
Wybiera losowo jedna i ją wyświetla ze stopniem
głębokości (oś z) zdefiniowanym w
stale_ObrazPlanszy.h, a charakterystycznym dla danego
terenu.
ObrazTerenuDomyslnyAnimowany
dziedziczy z ObrazuTerenuDomyslnego. Z sekwencji
klatek z rysunkami, którą dostaje w konstruktorze
wybiera klatke o nr 0 jako stalą (tlo - stopień
głębokości (oś z) charakterystyczny dla danego
terenu) - reszta klatek jest używana do animacji.
Stopień głębokości animacji (oś z) jest w
stosunku do tla zwiekszony o oś z Leminga (tzn.
Z_LEM).
ObrazTerenuZPixmapy
dostaje qpixmapę całej planszy i z niej wycina
rysunek przynależny sobie. Na rysunek może być
nałożona dodatkowo maska (np.strzepiąca, schody).
Domyślnie jest tylko pobierana maska odpowiadajaca
fragmentowi wycietej pixmapy.
ObrazTerenuZPixmapyAnimowany
dostaje dodatkowo sekwencje klatek animacji. Działa
podobnie jak ObrazPlanszyDomyślnyAnimowany z tą
różnica, że jako tło jest wczytywany
odpowiadający fragment z zadanej pixmapy. Animacja o
nr 0 jest pomijana.
Obiekty klas dopiskiem Animowany
posiadają:
który powoduje zmiane klatki z
rysunkiem danego terenu - efekt animacji.
- Atrybuty
obiektowe
-
|
- wskaźnik
na sprite terenu |
|
- współrzędne
terenu na planszy |
|
- współrzędne
terenu na planszy ekranu graficznego |
|
- wczytanych dla danego terenu |
|
- posiadają tylko klasy z
dopiskiem Animowany, sekwencja klatek
z animacją |
Poczatek
Klasa ObrazElementuSwiata i jej podklasy
Jest to klasa
abstrakcyjna. Jej podklasy odpowiedzialne są za
wizualizacje elementów świata. Obiekty tych klas
zarządzają sprite'ami odpowiadającymi zadanym
elementom świata.
W konstruktorach podaje się
wskaźnik na opowiadający element świata i
wskaźnik na ObrazPlanszy. W przypadku braku
pierwszego parametru jest przyjmowany tryb tzw.
kursora tzn. będzie wyświetlany sprite obrazujący
dany element i będzie następowala zmiana klatek
lecz za każdym razem trzeba mu podać współrzędne
wyświetlania na ogół współrzędne kursora
myszki. W przypadku braku współrzędnych element
stoi w miejscu. W trybie zwykłym każdy obiekt
otrzymawszy sygnal na slot rysujSie() odczyta
potrzebne informacje od odpowiadajacego mu elementowi
świata takie jak: stan, zwrot_nosa, liczba_impulsow,
licznik_impulsow, zapas sił ( odpowiednie dla danego
elementu) i dobierze odpowiedni rysunek w odpowiednim
miejscu na ekranie.
#include
<ObrazElementuSwiata.h>
Atrybuty
obiektowe
|
- wskaźnik
na ObrazPlanszy zarządcę |
|
- wskaźnik na sprite
odpowiadający danemu elementowi |
- Funkcje
publiczne
Sloty
- void pokazSie(QPoint pkt,QPoint
mpos)
- Metoda pokazująca leminga (kursor) w
polu na planszy o współrzędnych. pkt,
a na obrazie planszy mpos.
- UWAGA !! funkcja ściśle uzależniona od
obrazu planszy i jej trybu pracy. tzn.
wylicza położenie kursora wzgledem
widgetu obrazPlanszy a wzgledem siebie.
- void pokazSie()
- Każe tylko zmienić klatkę kursora.
- void odwrocSie()
- Odwraca element tzn. pobiera klatki
odwróconego elementu.
- rysujSie()
- Pobiera właściwą animację dla danego
elementu, wylicza jego położenie na
podstawie elementu wirtualnego i go
"wyświetla" w cudzyslowie
gdyż wyświetlenie nastapi dopiero gdy
obrazPlanszy zrobi update powierzchni
planszy.
Poczatek
|