|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
1.2.2011, 19:29 | #1 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Game Engine, objašnjenje?
Znam sto je game engine i cemu sluzi, sad me samo interesuje jedna stvar (za sad)
Malo sam trazio na netu da vidim kako od prilike ide kod jednog 2D Game Engine i naisao sam na ovaj clanak: http://gpwiki.org/index.php/SDL:Tuto...ngine_Overview E sad primjetio sam da u klasama - na primer cTextureManager da stoji ovako (class cTextureManager na ovoj stranici) Kod:
class cTextureManager { public: cTextureManager(); ~cTextureManager(); uint LoadTextureFromFile(std::string filename); uint LoadTextureFromMemory(SDL_Surface* Surface, std::string filename = ""); ......... }; |
1.2.2011, 20:01 | #2 |
Starosedelac
|
Re: Game Engine, objasnjenje?
Pa, ta klasa bi ti sluzila da "baratas" texturama, primer:
Kod:
cTextureManager* textureManager = new cTextureManager(); uint32 texId = textureManager->LoadTextureFromFile("textures/nekaslika.jpg"); ... // onda kad ti zatreba textureManager->DrawTexture(texId, 0.0f, 0.0f, ...); Sto se tice destruktora, oni se pozivaju kada se objekat obrise, npr.: delete(textureManager); U ovom konkretnom primeru, u destruktoru bi trebao da ides kroz svaku teksturu i da ih brises iz memorije. |
Sledeći korisnik se zahvaljuje korisniku EclipsE na korisnoj poruci: | ||
clzola (1.2.2011) |
1.2.2011, 20:16 | #3 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Re: Game Engine, objasnjenje?
Hvala, a sto bi stajalo unutar tijela funkcije
Kod:
cTextureManager() { // ... } textureManager.DrawTexture(texId, 0.0f, 0.0f, ...); ? |
1.2.2011, 20:21 | #4 | |
V.I.P. Programiranje
|
Re: Game Engine, objasnjenje?
Citat:
Kod:
cTextureManager myManager; Kod:
cTextureManager* myManager = new cTextureManager(); Kod:
void loadTexture() { cTextureManager myManager; // uradimo nešto sa myManager ... } // na kraju ove funkcije myManager je izašao iz scope-a i zove se njegov destruktor Kod:
delete myManager; U ovom mom članku imaš malo opširnije o upotrebi konstruktora i destruktora, i o klasama uopšte. EDIT: Sad sam video ovo drugo pitanje. Prvo, unutar tela funkcije pišeš bilo šta što treba da se desi kada se napravi objekat klase cTextureManager. Opet, imaš opširnije u članku. Što se tiče operatora ->, on se koristi kada je u pitanju pokazivač na objekat. Dakle, ako je definisano Kod:
cTextureManager firstOne; cTextureManager* secondOne = new cTextureManager; |
|
Sledeći korisnik se zahvaljuje korisniku Geomaster na korisnoj poruci: | ||
clzola (1.2.2011) |
1.2.2011, 20:28 | #5 | |
Starosedelac
|
Re: Game Engine, objasnjenje?
Citat:
Mislim da bi ti bilo dobro da krenes da citas malo o OOP zato sto su ovo neke osnovne stvari. Ako hoces, poslacu ti na PM neke preporuke gde da 'kupis' dobre knjige |
|
1.2.2011, 20:32 | #6 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Re: Game Engine, objasnjenje?
ae posalji
|
1.2.2011, 20:33 | #7 |
V.I.P. Programiranje
|
Re: Game Engine, objasnjenje?
|
1.2.2011, 20:40 | #8 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Re: Game Engine, objasnjenje?
nisam relodovao stranicu pa nisam video, kasnije sam video posle reload
E sad na primer ovo (Ako sam dobro ukapirao) Kod:
class cTextureManager { public: cTextureManager(); ~cTextureManager(); void DrawTexture(); }; cTextureManager::cTextureManager() { TEXTURE *texture; int x; int y; } cTextureManager::DrawTexture() { draw(texture, x, y); } int main() { cTextureManager *tekstura = new cTextureManager(); tekstura->DrawTexture(); } Poslednja ispravka: clzola (1.2.2011 u 20:47) |
1.2.2011, 20:47 | #9 | |
V.I.P. Programiranje
|
Re: Game Engine, objasnjenje?
Citat:
Definicije TEXTURE *texture, int x i y ne idu u konstruktor, konstruktor je samo funkcija. Kod:
class cTextureManager { protected: TEXTURE *texture; int x; int y; public: cTextureManager(); ~cTextureManager(); void DrawTexture(); }; cTextureManager::cTextureManager() { // u konstruktoru bi išlo nešto tipa texture = new TEXTURE, ili kako već // odnosno podešavanje svih potrebnih objekata } cTextureManager::DrawTexture() { draw(texture, x, y); } int main() { cTextureManager *tekstura = new cTextureManager(); tekstura->DrawTexture(); } |
|
1.2.2011, 20:49 | #10 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Re: Game Engine, objasnjenje?
Da li bih mogao da dodijelim vrijednost x=10 u konstruktoru...
znaci stavio bih texture = new texture; int x = 10; int y = 30; ?? |
1.2.2011, 20:50 | #11 |
V.I.P. Programiranje
|
Re: Game Engine, objasnjenje?
|
1.2.2011, 20:51 | #12 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Re: Game Engine, objasnjenje?
da bravo, zaboravio sam da je to prije deklarisano, u pravu si .. Hvala (za sad )
|
4.2.2011, 14:12 | #13 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Re: Game Engine, objasnjenje?
Zadnjih par dana sam malo cackao i do sada sam napisao ovo:
main.cpp: http://paste2.org/p/1227854 cSystemManager.h: http://paste2.org/p/1227855 cImageManager.h: http://paste2.org/p/1227858 cImage.h: http://paste2.org/p/1227857 cSystemManager.cpp: http://paste2.org/p/1227856 cImageManager.cpp: http://paste2.org/p/1227860 Kod radi. Sad bih htio da pitam, da li treba ovako da nastavim da pisem, da li je dobar dizajn koda i sta bih trebao da mijenjam (ako ima sta da se promjeni).... Ima par funkcija za koje nisam napisao kod ali to naravno kasnije planiram da popunim (vjerovatno i nesto izmjenim) |
4.2.2011, 14:18 | #14 | |
V.I.P. Programiranje
|
Re: Game Engine, objasnjenje?
Citat:
Samo jedna stvar, ako planiraš da pišeš neku igru/aplikaciju, nikad ne stavljaj sav kôd u main.cpp. Napravi neku klasu tipa Application i onda u njoj napravi razne metode tipa initialize, destroy ili startRendering, koje ćeš koristiti iz main-a. Pošto vidim da je pisanje tog wrappera oko SDL-a tvoj cilj (ne pisanje igre/aplikacije koja ga koristi) zadržaću se na tome. Samo napred, pozdrav. |
|
4.2.2011, 14:21 | #15 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Re: Game Engine, objasnjenje?
Mada ja sam mislio vise na dizajn ne na funkcije iz SDL koje ja koristim
Ok, hvala na komentaru |
4.2.2011, 15:24 | #16 |
Starosedelac
|
Re: Game Engine, objasnjenje?
Izgleda si ignorisao moj prvi post u ovoj temi
Zašto bi ti ImageManager crtao sliku? Lepo napraviš klasu Sprite koja sadrži informacije o toj slici koju želiš da nacrtaš na ekranu. Ona će sadržati neke informacije kao što su x, y, width, height, sdlSurface... Cilj ImageManagera treba da bude da samo vodi računa o tome koje slike učitane u memoriju: dakle, pozoveš ImageManager->LoadBMPFromFile("filename", SPRITE_PACMAN), i on u neki std::map<int, Texture> učita tu sliku iz fajla, pod ID-om SPRITE_PACMAN (neka const.). Posle toga, mogao bi da napraviš: Sprite* pacman = new Sprite(imgManager->GetTexture(SPRITE_PACMAN)); I kada crtaš: pacman->SetX(20); pacman->SetXY(30, 60); pacman->Draw(); Mislim, ne postoji jedan način da se odradi nešto. Tvoj pristup mi se ne sviđa zato što, pogledaj primer: Kod:
IMAGE hello; hello.image = ImgManager->LoadImageFromFile("data/images/hello.bmp"); // hocemo da nacrtamo kuglicu ImgManager->SetImageCoordinates(&hello, 100, 10); ImgManager->DrawImage(hello, screen); // sada, ne smemo da ucitavamo opet novu sliku iz fajla, vec ako hocemo // nov objekat sa tom slikom moramo da kopiramo strukturu hello // ili da nju iskoristimo za crtanje ImgManager->SetImageCoordinates(&hello, 110, 20); ImgManager->DrawImage(hello, screen); Kod:
ImgManager->LoadFromFile("data/images/hello.bmp", SPRITE_YELLOW_BALL); Sprite* obj1 = new Sprite(ImgManager->GetTexture(SPRITE_YELLOW_BALL)); Sprite* obj2 = new Sprite(ImgManager->GetTexture(SPRITE_YELLOW_BALL)); obj1->SetPosition(10, 20); obj2->SetPosition(30, 40); obj1->Draw(); obj2->Draw(); Valjda ćeš izvući nešto korisno iz ovog. |
4.2.2011, 15:27 | #17 |
Član
|
Re: Game Engine, objasnjenje?
Samo pazi koliko sam primetio u main.cpp, napravio si ona dva objekta dinamicki upotrebom operatora new a nigde ih nisi kasnije obrisao sa delete...Takodje mislim da je najbolje da napravis neku glavnu GameEngine klasu da ne trpas sve u main..Znaci da ti main izgleda nesto ovako
Kod:
int main() { GameEngine *game = new GameEngine(800,600,"Moja aplikacija"); while(game->running) { game->Draw(); game->Update(); game->Cleanup(); } delete game; return 0; } Kod:
#ifndef GAMEENGINE_H #define GAMEENGINE_H class GameEngine { public: GameEngine(int width, int height,std::string name); void Draw(); void Update(); void Cleanup(); }; #endif |
4.2.2011, 15:35 | #18 | |
V.I.P. Programiranje
|
Re: Game Engine, objasnjenje?
Citat:
|
|
4.2.2011, 18:50 | #19 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Re: Game Engine, objašnjenje?
@Eclipse
Skapirao sam sta mislis... Ja pravim objekat hello. I onda mu lodujem sliku hello.bmp. Ako bih napravio objekat hello2 morao bih da lodujem novu sliku.. Treba sliku hello.bmp ucitati jednom, a hello i hello2 bi koristili tu sliku @Nisam Nesto Smart Za sad bih napravio nesto mini engine, ovo radim vise iz toga sto zelim malo da naucim i tako to, a i kasnije mi moze koristiti ako bih pravio neke igrice... |
4.2.2011, 19:41 | #20 |
Član
|
Re: Game Engine, objašnjenje?
Hmm nisam znao da je loša praksa da stavljas takve parametre u konstruktoru....mislio sam da je laske tako nego praviti zasebnu funkciju..but oh well never mind...
@cizola: Da ja mislim da je to Eclipse pokusao da objasni..da ti ImageManager barata samo oko ucitavanja slika...Nego zaboravio sam kako je u SDL ali znam da u SFML da su oni zasebno napravili Image klasu i zasebno Sprite klasu...gde Image uglavnom samo sluzi za ocitavanje iz memorije a Sprite za manipulisanje. |
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Problem, game engine u SDL-u | boshkodj | Programiranje | 16 | 9.7.2009 14:48 |
Jednostavan game engine [tek treba] | allokin | Pravljenje igara | 6 | 9.3.2009 15:51 |
Freeware game engine | kovacevicdr | Pravljenje igara | 5 | 27.12.2008 1:55 |
2d game engine | Damjan | Pravljenje igara | 48 | 22.6.2007 11:35 |
Road Rush kodovi? | Darth Ivan | Stare igre | 5 | 1.11.2006 22:41 |