Kezdőoldal » Számítástechnika » Programozás » Mennyire bonyolult Windowsra...

Mennyire bonyolult Windowsra csinálni DirectX segítségével, akár 2D/3D -s játékot? Van magyar leírás egészen az alapoktól?

Figyelt kérdés

2015. júl. 9. 07:46
1 2 3 4
 31/36 A kérdező kommentje:
Mondj valamit ami szerinted annyira bonyolult C++ nyelvben amit 2 hét után nem értettem meg, és befejezem a vitát.
2015. júl. 14. 17:03
 32/36 SimkoL ***** válasza:

Talán megérhetnéd, hogy ha ismersz pár függvényt, attól nem ismered a C++.

Alap dolog:

#include <windows.h>

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "MyApp";

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{

HWND hwnd;

MSG messages;

WNDCLASSEX wincl;

wincl.hInstance = hThisInstance;

wincl.lpszClassName = szClassName;

wincl.lpfnWndProc = WindowProcedure;

wincl.style = CS_DBLCLKS;

wincl.cbSize = sizeof (WNDCLASSEX);

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

wincl.lpszMenuName = NULL;

wincl.cbClsExtra = 0;

wincl.cbWndExtra = 0;

wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

if (!RegisterClassEx (&wincl)) return 0;

hwnd = CreateWindowEx(0, szClassName, "MyApp", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL);

ShowWindow (hwnd, nFunsterStil);

while (GetMessage (&messages, NULL, 0, 0))

{

TranslateMessage(&messages);

DispatchMessage(&messages);

}

return messages.wParam;

}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message)

{

case WM_DESTROY:

PostQuitMessage (0);

break;

default:

return DefWindowProc (hwnd, message, wParam, lParam);

}

return 0;

}


ismerős ?

2015. júl. 14. 18:12
Hasznos számodra ez a válasz?
 33/36 SimkoL ***** válasza:
Ne gyere azzal, hogy ez inkább WIN API, mert ha windows alá akarsz fejleszteni minimum, hogy ismered az alapokat.
2015. júl. 14. 18:17
Hasznos számodra ez a válasz?
 34/36 A kérdező kommentje:

WNDCLASSEX -nél egyszerűbb ha így incializálod: WNDCLASSEX wincl = {0} és akkor


nem kell 0 -át értékül adni a tagoknak ha azt akarod null legyen. (Ez csak annál a


structnál müködik amelyiknek nincs konstruktora).


Használhatod a ZeroMemory macrot is ami egy szimpla memset hívás 0 -val.


De biztosabb ha csinálsz egy template funkciót rá aminek két előnye is van:

1: Egyel kevesebb paraméterrel kell meghívni.

2: Biztonságosabb lesz hiszen ellenőrzöd nem e nullptr -re hívod meg.


template<typename T>

void SafeZeroMem(T *t)

{

if (t)

memset(t, 0, sizeof(T));

}


Elfelejtetted ellenőrizni a HWND -t nem null -e a CreateWindowEx után.


A TranslateMessage csak akkor szükséges ha kezeled a WM_CHAR üzenetet is hiszen a


Virtual Key kódot alakítja át karakterre.


A DispatchMessage pedig értelemszerűen továbbítja az üzenetet.


A GetMessage és a PeekMessage között a különbség, hogy az egyik vár az üzenetre a


másik nem. Utóbbit ezért is használják játékoknál általában.

2015. júl. 14. 18:47
 35/36 anonim ***** válasza:

2 hét alatt mit nem értesz meg?

Hosszú a lista:

- programozói gondolkodás

- paradigmák, főleg az OOP

- a C++ minden feature-je a c++14 -ig

- programtervezési minták, azok alkalmazása

- Winapi

- A memória működése

- A compiler működése (nagyon fontos, sok hibaüzenetet megértesz belőle)

- egyszerű elemzők felépítése, implementálása (resource managerhez XML minimum...)

- egy egyszerű játék felépítése (main loop, game statek ...)

- vektorműveletek

- mátrixműveletek

- shader programok

és még sorolhatnám...


Jajj és van mit felmutatnom. Melyik projektemet linkeljem be GitHub-ról? A multitasking operációs rendszer kernelemet, az OpenGL alapú game enginemet, a saját programnyelvem interpreterét, vagy netán egy sz*rrá optimalizált CPU rendederrel rendelkező javaban írt engine-t?

2015. júl. 14. 19:15
Hasznos számodra ez a válasz?
 36/36 A kérdező kommentje:
Elég a profilodat linkelni, nem kell egyesével mindent.
2015. júl. 14. 20:46
1 2 3 4

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!