kabanek Napisano Marzec 25, 2009 Zgłoś Share Napisano Marzec 25, 2009 mam taki problem... Zaczynam się uczyć DX i zacząłem od kursu http://www.gamedev.pl/tutorials.php?x=view&id=124 chciałem tą wiedzę zamknąć w klasy i coś mi nie wychodzi... Oto mój kod: #ifndef H_TEXTURE #define H_TEXTURE #include <windows.h> #include <ddraw.h> class Texture { private: bool Success; int Height; int Width; public: Texture(char * fineName, LPDIRECTDRAWSURFACE &lpDDS); bool loadTexture(char * fineName, LPDIRECTDRAWSURFACE &lpDDS); bool loaded(); int getHeight(); int getWidth(); }; #endif %Ęip6ć6VFRfCvćFw2ćfwC6ć6VFRfCśFG&rćfwC6ć6VFRgVCFWGW&RćgVCFWGW&RŁFWGW&R6\"fĆTćRD$T5DE$u5U$d4RfśDE2F2fwCśĆEFWGW&RfĆTćRDE2Ś&FWGW&SŁŚĆEFWGW&R6\"fĆTćRD$T5DE$u5U$d4RfśDE2$D$$D&D2F3D26ć7\0$$DĆDvRTĆfĆTćRtU$D%De$dR\0b$ÓTF2fwC7V66W73f6S\0W76vT&TgVCRVF66v7FbĆRb333gVCgVCgVC%%4d$D&WGW&f6S\0vWD&ŚV7B$6ŚVb&fś&6ć77&VFT6F&ĆTD2T6VĆV7D&ŚV7B6ć7Ć$bDE2fwCvWDD2fśF2ÓDE&D&BF2&ć&vGF&ć&VvB6ć75$44DE2fwC&VĆV6TD2F2F2fwCVvC&ć&VvCF2fwCvGF&ć&vGFFVĆWFTD26ć7FVĆWFT&ŚV7B$\0\0\0F2fwC7V66W73G'VS&WGW&G'VSŚ&FWGW&SŁŚĆFVB&WGW&F2fwC7V66W73ŚBFWGW&SŁŚvWDVvB&WGW&F2fwCVvCŚBFWGW&SŁŚvWEvGF&WGW&F2fwCvGF%Ęip6fćFVbD6FVfćRD6ć6VFRfCvćFw2ćfwC6ć6VFRfCśFG&rćfwCŚ6Ć72Fć&fFS6\" fĆTćSD$T5DE$rDCD$T5DE$u5U$d4RDE3 & amp;7V66W73BBBVvC BvGFV&Ć3Fć6\"ŚfĆTćRDE5U$d4TDU42fśFG6BD$T5DE$u5U$d4RfśDE4'&BB&ĆEFWGW&R6\"ŚfĆTćR&ĆFVB6\"vWDfĆTćRfB&BD$T5DE$u5U$d4RfśDE4V&D$T5DE$u5U$d4RfśDE4'&BvWDVvBBvWEvGFÓ6VćFb\0%Ęip6ć6VFRfCvćFw2ćfwC6ć6VFRgVCFććgVC6ć6VFRgVCFWGW&RćgVCF泣Fć6\"ŚfĆTćRDE5U$d4TDU42fśFG6BD$T5DE$u5U$d4RfśDE4'&BBbF&V7DG&t7&VFRTfśDBTb333łDEDBfwC7&VFU7W&f6RfśFG6BfśDE4'&Tb333łDEW76vT&TgVCRVF66v7FbFV7GW'b333gVCgVCgVC%%4d$DF2fwC7V66W73f6S&WGW&F2fwCśĆEFWGW&RfĆTćRbb333F2fwC7V66W72W76vT&TgVCRVF66v7FbFV7GW'b333gVCgVCgVC%%4d$DF2fwCF2fwCŚ&F泣ĆEFWGW&R6\"ŚfĆTćRFWGW&RBćWrFWGW&RfĆTćRF2fwCśDE2FV7GW&\0F2fwC7V66W73BfwCśĆFVBbb333F2fwC7V66W72W76vT&TgVCRVF66v7FbFV7GW'b333gVCgVCgVC%%4d$D&WGW& amp;f6SF2fwCVvCBfwCśvWDVvBF2fwCvGFBfwCśvWEvGF FVĆWFRfCF2fwCfĆTćSfĆTćS\0F2fwC7V66W73G'VS&WGW&F2fwC7V66W73Ś&F泣ŚĆFVB&WGW&F2fwC7V66W73Ś6\"F泣ŚvWDfĆTćR&WGW&F2fwCfĆTćSŚBF泣ŚvWDVvB&WGW&F2fwCVvCŚBF泣ŚvWEvGF&WGW&F2fwCvGFfBF泣&BD$T5DE$u5U$d4RfśDE4V&D$T5DE$u5U$d4RfśDE4'&$T5B7&2łS#WÓ$T5BG7Bł3#ÓDE4V&fwC&BfśG7BĆDE4'&f7&2T\0&j\"rŚ #include <windows.h> #include <ddraw.h> #include "Tank.h" int windowSHeight = 800; int windowSWidth = 600; int depth = 32; char appName[]="Tank by Kaban"; Tank *tank; //deklaracja czołgu //Deklaracje wskaźników DirectDraw LPDIRECTDRAW lpDD = NULL; LPDIRECTDRAWSURFACE lpDDSEkran = NULL; LPDIRECTDRAWSURFACE lpDDSObraz = NULL; int x; //zmienna przechowująca położenie napisu DWORD Czas_st=GetTickCount(); //zapowiedzi używanych funkcji LRESULT CALLBACK Obsluga(HWND hOkno, UINT uMsg, WPARAM wPar, LPARAM lPar); bool WczytajBMP(LPSTR nazwa_pliku, LPDIRECTDRAWSURFACE lpDDS); void Render(); void Zwolnij(); //****************************************************************************** //****************************************************************************** //główna część programu int WINAPI WinMain(HINSTANCE hProgram, HINSTANCE, LPSTR, int swPokaz) { //Rejestracja klasy okna WNDCLASS KlasaOkna; KlasaOkna.style = 0; KlasaOkna.hInstance = hProgram; KlasaOkna.lpszClassName = appName; KlasaOkna.lpfnWndProc = Obsluga; KlasaOkna.hIcon = LoadIcon(NULL,"ikona"); KlasaOkna.hCursor = LoadCursor(NULL,IDC_ARROW); KlasaOkna.lpszMenuName = NULL; KlasaOkna.cbClsExtra = 0; KlasaOkna.cbWndExtra = 0; KlasaOkna.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH); if(!RegisterClass(&KlasaOkna)) return 0; //Utworzenie okna HWND hOkno; hOkno = CreateWindowEx(WS_EX_TOPMOST,appName,appName,WS_POPUP,0,0,300,200, NULL,NULL,hProgram,NULL); if(hOkno==NULL) return false; //wyświetlenie okna ShowWindow(hOkno,swPokaz); UpdateWindow(hOkno); //utworzenie obiektu głównego i ustawienie trybów współpracy if(DirectDrawCreate(NULL,&lpDD,NULL) != DD_OK) return false; lpDD->SetCooperativeLevel(hOkno,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN); lpDD->SetDisplayMode(windowSHeight,windowSWidth,depth); //ustawienia ekranu //stworzenie powierzchni podstawowej DDSURFACEDESC ddsd; ZeroMemory(&ddsd,sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; if(lpDD->CreateSurface(&ddsd,&lpDDSEkran,NULL) != DD_OK) return false; //stworzenie powierzchni pozaekranowej ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = 500; ddsd.dwHeight = 25; if(lpDD->CreateSurface(&ddsd,&lpDDSObraz,NULL) != DD_OK) return false; //Wczytanie bitmapy z zestawem kafli //if(!WczytajBMP("napis.bmp",lpDDSObraz)) return false; //wczytywanie tanka tank= new Tank("tank1.bmp", ddsd, lpDDSObraz, 0,0); if (!tank->loaded()) return false; //Główna pętla pobierania komunikatów MSG msg; while (msg.message!=WM_QUIT) { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Render(); } } //przywrócenie poprzedniej rozdzielczości lpDD->RestoreDisplayMode(); //zwolnij obiekty DDRaw Zwolnij(); return msg.wParam; } //****************************************************************************** //****************************************************************************** //funkcja pobierania komunikatów LRESULT CALLBACK Obsluga(HWND hOkno, UINT uMsg, WPARAM wPar, LPARAM lPar) { switch(uMsg) { case WM_KEYDOWN: switch (wPar) { case VK_ESCAPE: PostQuitMessage(0); break; }; break; case WM_CLOSE: DestroyWindow(hOkno); break; case WM_DESTROY: PostQuitMessage(0); break; }; return DefWindowProc(hOkno,uMsg,wPar,lPar); } //****************************************************************************** //****************************************************************************** //funkcja wczytująca bitmapy bool WczytajBMP(LPSTR nazwa_pliku, LPDIRECTDRAWSURFACE lpDDS) { HBITMAP hBMP; BITMAP bmp; HDC hdc; HDC pomocniczy; hBMP = (HBITMAP) LoadImage(NULL,nazwa_pliku,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); if(hBMP ==NULL) return false; GetObject(hBMP ,sizeof(bmp),&bmp); pomocniczy = CreateCompatibleDC(NULL); SelectObject(pomocniczy,hBMP ); if(lpDDS->GetDC(&hdc) == DD_OK) { BitBlt(hdc,0,0, bmp.bmWidth, bmp.bmHeight, pomocniczy,0,0,SRCCOPY); lpDDS->ReleaseDC(hdc); } DeleteDC(pomocniczy); DeleteObject(hBMP); return true; } //****************************************************************************** //****************************************************************************** //funkcja renderująca void Render() { tank->print(lpDDSEkran,lpDDSObraz); /*RECT src = {0, 0, 500, 25}; RECT dst = {0, 0,300,200}; lpDDSEkran->Blt(&dst,lpDDSObraz,&src,0,NULL);**/ } //****************************************************************************** //****************************************************************************** //funkcja zwalniająca utworzone obiekty DDraw void Zwolnij() { //delete &tank;//usuwamy tanka if(lpDDSObraz!=NULL) lpDDSObraz->Release(); if(lpDDSEkran!=NULL) lpDDSEkran->Release(); if(lpDD!=NULL) lpDD->Release(); } Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Marzec 25, 2009 Zgłoś Share Napisano Marzec 25, 2009 no ok ale co ci nie wychodzi ? Zapodales duzo kodu tylko nie wiem czego mam szukac w nim... Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
kabanek Napisano Marzec 25, 2009 Autor Zgłoś Share Napisano Marzec 25, 2009 chodzi o to, że chcę wczytać obrazek i gdy sprawdzam czy się wczytał wyskakuje kończy mi, że nie wczytało, tzn w linijce if (!tank->loaded()) return false; to ta funkcja zwraca mi false czyli że nie wczytało mi tekstury i kończy program... błąd pewnie jest w klasie ale nie wiem gdzie zacząć szukać... Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Marzec 25, 2009 Zgłoś Share Napisano Marzec 25, 2009 w metodzie loadTexture ustawiasz success na podstawie metody loadad() w ktorej to zwracasz stan zmiennej success.... troche to dziwne co wiecej nie widze nigdzie inicjowania tej zmiennej jakas bazowa wartoscia, na moj gust tutaj jest cos nie teges Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
kabanek Napisano Marzec 25, 2009 Autor Zgłoś Share Napisano Marzec 25, 2009 na mój gust też ale nie wiem jak co zrobić, żeby działało... jakby nie było teges to by teksturowanie chodziło. Ja proszę o jakąś pomoc w tym kodzie bo z resztą projektu sobie jakoś poradzę z góry dzięki Link do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Marzec 25, 2009 Zgłoś Share Napisano Marzec 25, 2009 Witam choć nie jestem fachowcem od C++ to powiem tak: Powstawiaj sobie pułapki (breakpoints) np. taki kod: ... MessageBox(NULL,"pulapka 1 w konstuktorze klasy","",MB_OK | MB_ICONINFORMATION); ... ' %jLJJ'+y&7i$iz:kfqzfŹĘip\0fCfCGRV[nb[6Ś'ŚVŚGŚRFśĆVŚćV[6śFśBFV[66RŚW7BśW\0F2fwC7V66W73f6S\0&WGW&f6S Takie głupie, ale skuteczne szukanie błędu w programie jest wręcz bardzo dobrym rozwiązaniem, innym sposobem na szukanie błędów jest przelecenie programu debugerem... ale kto to lubi.... Pozdrawiam. Prawdziwy programista wiesza sie wraz ze swoim programem. Link do komentarza Udostępnij na innych stronach More sharing options...
kabanek Napisano Marzec 25, 2009 Autor Zgłoś Share Napisano Marzec 25, 2009 no już wiem gdzie wywala błąd... Tank::Tank(char *fileName,DDSURFACEDESC &ddsd, LPDIRECTDRAWSURFACE &lpDDSObraz, int x, int y) { if ((DirectDrawCreate(NULL,&lpDD,NULL) != DD_OK)||(lpDD->CreateSurface(&ddsd,&lpDDSObraz,NULL) != DD_OK)) { MessageBox(NULL,"NIE Udało się wczytać tekstury!","",MB_OK | MB_ICONINFORMATION); this->Success=false; return; } wyskakuje ten MessageBox co tutaj jest źle? Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Marzec 25, 2009 Zgłoś Share Napisano Marzec 25, 2009 Raczej kazda funkcja Dx-a zwraca wartosc HRESULT do tego Dx ma fajna bibioteke (bodajze DxErr8) do tlumaczenia tych komunikatow, wystarczy sparwdzic o co mu chodzi. www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
kabanek Napisano Marzec 25, 2009 Autor Zgłoś Share Napisano Marzec 25, 2009 przy wywoaniu funkcji lpDD->CreateSurface(&ddsd,&lpDDSObraz,NULL) wywala i taki bd.... Mi taki komunikat szczerze za wiele nie młwi... zaczem kombinowa i nic zmieniem nieco konstruktor na taki: Tank(char *fileName,DDSURFACEDESC &ddsd, LPDIRECTDRAWSURFACE &lpDDSObraz, HWND &hOkno, int x, int y) Tank::Tank(char *fileName,DDSURFACEDESC &ddsd, LPDIRECTDRAWSURFACE &lpDDSObraz, HWND &hOkno, int x, int y) { TCHAR msg; msg=DirectDrawCreate(NULL,&lpDD,NULL); if (msg!=DD_OK) { this->Success=false; MessageBox(hOkno,DXGetErrorDescription9(msg),"gra1",MB_OK | MB_ICONINFORMATION); return; } lpDD->SetCooperativeLevel(hOkno,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN); msg=lpDD->CreateSurface(&ddsd,&lpDDSObraz,NULL); if (msg!=DD_OK) { this->Success=false; MessageBox(0,DXGetErrorDescription9(msg),"gra2",MB_OK | MB_ICONINFORMATION); return; } this->loadTexture(fileName); if (!this->Success) MessageBox(NULL,"NIE Udao si wczyta tekstury!","",MB_OK | MB_ICONINFORMATION); MessageBox(NULL,"Wczytaem!","",MB_OK | MB_ICONINFORMATION); this->X=x; this->Y=y; this->Success=true; } wynik dziaania tych funkcji zapisuj do zmiennej msg i sprawdzam, czy wszystko poszo ok. Przez pierwszy warunek przechodzi jak powinien, ale przy drugim wywietla mi taki komunikat kontrolny: normalnie idzie si zaama jakie pomysy? Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.