.[ ČeskéHry.cz ].
Praca z class

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Zhuleny



Založen: 31. 01. 2012
Příspěvky: 28

PříspěvekZaslal: 17. září 2012, 11:25:40    Předmět: Praca z class Odpovědět s citátem

Dobry den.

Programujem si pokusne vlastny DX9 engine, toto je uz vlastne v druhej verzii. No tentokrat to chcem urobit pokusne cez triedy, pretoze na prvej verzii sa mi podarilo .x nacitat a pohybovat s nim po "mape" ale uz sa mi ho nepodarilo rozanimovat, pretoze nerozumiem prilis praci z class.

Planujem si vytvorit cez class VideoManazera ktory sa postara o nastavenie a inicializovanie grafickej karty a direct input v direct x.

Pozeral som nejake navody na internete ale stale mi nieco zrejme unika....
Chcem nastavit graficku kartu prikazom start, v pripade zmeny velkosti okna by som chcel pouzit reset a uvolnit pamat a vyhpnut dx prikazom stop. Zatial to nejde skompilovat vo VS2010express z hlaskou :
1>c:\users\petríq\documents\visual studio 2010\projects\engine verzia 2\engine verzia 2\main.cpp(112): error C2352: 'VideoManager::Start' : illegal call of non-static member function
1> c:\users\petríq\documents\visual studio 2010\projects\engine verzia 2\engine verzia 2\main.cpp(20) : see declaration of 'VideoManager::Start'

Co je v tomto kode zle?
PS viem ze to nemozem inicializovat cez main ale cez winmain, mne vsak teraz ide len o skompilovanie.

kód:

#include <Windows.h>
#include <d3dx9.h>
#include <dinput.h>
/* Pokus o vytvorenie triedy ktora by spravovala video nastavenie.
 *
 */
struct VIDEOSETTING
{
   LPDIRECT3D9            lD3D;
   LPDIRECT3DDEVICE9      l3dDevice;
   LPDIRECTINPUT8         lDI;
   LPDIRECTINPUTDEVICE8   lDIDevice;
   LPD3DXFONT            lfont;
   HINSTANCE            hInstance;
   HWND               hWnd;
};
class VideoManager
{
public:
   HRESULT Start(HWND hwnd, HINSTANCE hinstance);
   //HRESULT ~Start(){ delete vs; delete d3dpp;}
   HRESULT Koniec();
   HRESULT ReSet();
private:
   VIDEOSETTING *vs;
   D3DPRESENT_PARAMETERS *d3dpp;
};
HRESULT VideoManager::Start(HWND hwnd, HINSTANCE hinstance)
{
   HRESULT hr;
   vs = new VIDEOSETTING;
   ZeroMemory( &vs, sizeof(vs));
   d3dpp = new D3DPRESENT_PARAMETERS;
   ZeroMemory( &d3dpp, sizeof(d3dpp));
   vs->hWnd=hwnd;
   vs->hInstance=hinstance;
   vs->lD3D=NULL;
   vs->l3dDevice=NULL;
   vs->lD3D=Direct3DCreate9( D3D_SDK_VERSION );
   if(!vs->lD3D)
   {
      MessageBox(vs->hWnd, "Zlyhalo: Direct3DCreate9\n\nProgram sa ukonci", "dx-init-setup",MB_OK);
      SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
   }
   //D3DPRESENT_PARAMETERS d3dpp;
   
   d3dpp->Windowed = true;
   d3dpp->BackBufferHeight=1024;
   d3dpp->BackBufferWidth=768;
   d3dpp->SwapEffect = D3DSWAPEFFECT_DISCARD;
   d3dpp->BackBufferFormat = D3DFMT_X8R8G8B8;
   d3dpp->EnableAutoDepthStencil = true;
   d3dpp->AutoDepthStencilFormat = D3DFMT_D16;
   d3dpp->hDeviceWindow =vs->hWnd;
   d3dpp->BackBufferCount=2;

   hr = vs->lD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, vs->hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING, d3dpp, &vs->l3dDevice );
   if(hr)
   {
      MessageBox(vs->hWnd, "Zlyhalo: Create Device\nProgram sa ukonci", "dx-init-setup",MB_OK);
      SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
   }
   vs->l3dDevice->SetRenderState(D3DRS_ZENABLE, true);
   vs->l3dDevice->SetRenderState(D3DRS_STENCILENABLE, true);
   hr=D3DXCreateFont( vs->l3dDevice, 27, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), &vs->lfont );
   vs->lDI=NULL;
   vs->lDIDevice=NULL;

   
   hr= DirectInput8Create(vs->hInstance, DIRECTINPUT_VERSION,    IID_IDirectInput8, (VOID**)&vs->lDI, NULL);
   if(hr)
   {
      MessageBox(vs->hWnd, "Zlyhalo: DirectInput8Create\nProgram sa ukonci", "dx-init-setup",MB_OK);
      SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
   }
   hr = vs->lDI->CreateDevice(GUID_SysKeyboard, &vs->lDIDevice, NULL);
   if(hr)
   {
      MessageBox(vs->hWnd, "Zlyhalo: g_lpDI->CreateDevice\nProgram sa ukonci", "dx-init-setup",MB_OK);
      SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
   }
   hr = vs->lDIDevice->SetDataFormat(&c_dfDIKeyboard);
   if(hr)
   {
      MessageBox(vs->hWnd, "Zlyhalo: g_lpDIDevice->SetDataFormat\nProgram sa ukonci", "dx-init-setup",MB_OK);
      SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
   }
   hr = vs->lDIDevice->SetCooperativeLevel(vs->hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
   if(hr)
   {
      MessageBox(vs->hWnd, "Zlyhalo: g_lpDIDevice->SetCooperativeLevel\nProgram sa ukonci", "dx-init-setup",MB_OK);
      SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
   }
   hr = vs->lDIDevice->Acquire();
   return hr;
}
HRESULT VideoManager::Koniec()
{
   HRESULT hr;
   
   return hr;
}
HRESULT VideoManager::ReSet()
{
   HRESULT hr;
   return hr;
}
void Main()
{
   HWND hwnd;
   HINSTANCE hinstance;
   HRESULT hr = VideoManager::Start(hwnd, hinstance);
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1695
Bydliště: Plzeň

PříspěvekZaslal: 17. září 2012, 12:08:58    Předmět: Odpovědět s citátem

Tak když voláš nestatickou metodu "statickým" způsobem, tak je jasné, že to nepůjde...

Musíš buď:
kód:
void Main()
{
   HWND hwnd;
   HINSTANCE hinstance;
   VideoManager videoMan;
   HRESULT hr = videoMan.Start(hwnd, hinstance);
}


nebo

kód:
void Main()
{
   HWND hwnd;
   HINSTANCE hinstance;
   VideoManager *videoMan = new VideoManager();
   HRESULT hr = videoMan->Start(hwnd, hinstance);

   delete videoMan;
}


Nebudu vysvětlovat jaký je v tom rozdíl, od toho jsou moudré knížky a články o C++.
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Poky



Založen: 29. 06. 2009
Příspěvky: 182
Bydliště: Písek / Plzeň

PříspěvekZaslal: 17. září 2012, 12:52:53    Předmět: Odpovědět s citátem

A ještě jedna rada: Ujednotil bych si jazyk(mluvený, nikoli programovací) ve kterém to programuješ. Kombinuješ Angličtinu se Slovenštinou Smile Ten kod pak vypadá docela strašně Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zhuleny



Založen: 31. 01. 2012
Příspěvky: 28

PříspěvekZaslal: 17. září 2012, 17:12:28    Předmět: Odpovědět s citátem

Dakujem VODA, nikde som nevidel ze by som mal class inicializovat podobne ako strukturu.
Vychadzal som z tohoto tutorialu http://linuxos.sk/clanok/346/index.html
VODA vadilo by ti moc ak by som pouzil z tvojej hry SOLERTIA povodny model Zoji?

Poky, no programovat ciste v slovencine mi asi nepojde Smile ale vies ked clovek nevie ani jeden jazyk na 100% tazko sa mu vybera.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Poky



Založen: 29. 06. 2009
Příspěvky: 182
Bydliště: Písek / Plzeň

PříspěvekZaslal: 17. září 2012, 17:26:29    Předmět: Odpovědět s citátem

Zhuleny napsal:
Dakujem VODA, nikde som nevidel ze by som mal class inicializovat podobne ako strukturu.


Ono struktura a třída v C++ je totéž, pouze struktura je implicitně veřejná zato třáda je implicitně privátní - tedy její atributy a metody.

Jinak AJ je myslím lepší volba.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1695
Bydliště: Plzeň

PříspěvekZaslal: 17. září 2012, 18:00:27    Předmět: Odpovědět s citátem

Zhuleny napsal:
VODA vadilo by ti moc ak by som pouzil z tvojej hry SOLERTIA povodny model Zoji?

No, nebylo by lepší použít vlastní model?
Jednak si nejsem jist, že ho dokážeš načíst, i když je pravda, že data modelů v Aquacore X3 byla v textovém režimu, takže naparsovat jej by neměl být problém...otázka je, zda-li bys ho dokázal správně sestavit...použít animace apod. Občas i já mám velké problémy pochopit, jak že jsem to vlastně naprogramoval...

I tak Ti to asi nedovolím...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
josh



Založen: 30. 07. 2007
Příspěvky: 74

PříspěvekZaslal: 17. září 2012, 18:25:40    Předmět: Odpovědět s citátem

VODA napsal:

I tak Ti to asi nedovolím...


spravna odpoved byla: Kolik das? Smile
_________________
Tak Karle, kolik?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zhuleny



Založen: 31. 01. 2012
Příspěvky: 28

PříspěvekZaslal: 17. září 2012, 19:11:56    Předmět: Odpovědět s citátem

citace:
...otázka je, zda-li bys ho dokázal správně sestavit...použít animace apod. Občas i já mám velké problémy pochopit, jak že jsem to vlastně naprogramoval...

I tak Ti to asi nedovolím...

No ja by som chcel do svojho enginu zabudovat vypocet animacii "on the fly"
takze potrebujem iba modely kazdej koncatiny... mam to v hlave troska premyslene, len k tomu potrebujem engine ktory budem dokonale poznat a ovladat Smile

Poky dakujem za uplne obajsnenie.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 17. září 2012, 22:39:11    Předmět: Odpovědět s citátem

Preco nepouzivas zakladne sample, co su k DX dodane ?

Ved tam mas vsetko nakonfigurovane tak, ze to rovno ide.

Ja si ani po 10 rokoch kodenia v DX/XNA nespominam na vsetky parametre, co sa tam nastavuju - od toho je tu predsa SDK, aby ti dalo zakladnu kostru kodu, kde zinicializujes graf.mod a mozes s nim rovno pracovat.


Pises, ze mas nejaky problem s "classes". To teraz narazas na "class" ako prvok jazyka C++ ? V tom pripade by som silne doporucoval postudovat o nich najprv nieco.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zhuleny



Založen: 31. 01. 2012
Příspěvky: 28

PříspěvekZaslal: 18. září 2012, 11:31:27    Předmět: Odpovědět s citátem

VladR Tie sample pouzivaju DXUT kniznice, neviem kedy si sa podla tych samplov ucil sam, ale vtedy zrejme nepouzival MS na sample DXUT kniznicu.

ano narazam na class, ale nevidim nikde zeby som napisal "classes".

Chcem sa to naucit, a ked mi to tutorial poriadne nevysvetlil, nasiel som pomoc tu.
Unavujes sa vobec citat cele diskusie ci len prvy post a potom hned klikas na "post reply"? Wink Ale dakujem za pomoc a dobre mienene rady.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 18. září 2012, 14:53:41    Předmět: Odpovědět s citátem

Zhuleny napsal:
VladR Tie sample pouzivaju DXUT kniznice, neviem kedy si sa podla tych samplov ucil sam, ale vtedy zrejme nepouzival MS na sample DXUT kniznicu.
No a ? Nikde predtym nepises, ze ti to vadi, a ze preco. Zrejme ti to este nikto nepovedal, ale toto forum nedisponuje mind-readerom. Musis sa proste unuvat sam, akokolvek absurdne to znie Wink

Zhuleny napsal:
ano narazam na class, ale nevidim nikde zeby som napisal "classes".
A do prdele, tak prepac, ze som ti vlozil do papule plural namiesto singularu Smile

Zhuleny napsal:
Chcem sa to naucit, a ked mi to tutorial poriadne nevysvetlil, nasiel som pomoc tu.
No, pokial sa chces celu problematiku tried naucit len ciste z postov na forach (a totalne ignorovat kvanta dostupnych (aj free) knih), tak smelo do toho Laughing

Zhuleny napsal:
Unavujes sa vobec citat cele diskusie ci len prvy post a potom hned klikas na "post reply"? Wink
Predstav si, a tomu teraz asi neuveris, ze som si fakticky precital cely post Smile

No a prave preto som si trufol dat zopar dobre mierenych rad. Nepadli na uzitok. Nevadi Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna