dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

key binding'a sisteema
Goto page 1, 2  Next
 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 08, 2007 11:17 am    Post subject: key binding'a sisteema

es izmmekleejos googlee keybindinga sisteemu, bet tur redzeeju tikai kautko galiigi ne par teemu, fps speelju keybindinga raksti (kur izskaidro ko tas dara, ka pielietot piemeeram uz unreal tournament), un atradu funkciju binding'a sisteemu, kura man veel iisti nederees... taa nu domaaju atnaakt sheit un uzprasiit, kaa shaadu sisteemu izveidot! nav jau iipashi steidzami, bet tomeer...
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Sep 08, 2007 11:35 am    Post subject:

Īsti atkal nav skaidrs, ko tu gribi panākt, tāpēc minēšu - gribi pārdefinējamus taustiņus, tipa, ka opcijās var uzstādīt, ka W ir iet uz priekšu, S ir iet uz atpakaļ, MOUSE_BUTTON_1 ir šaut, utt.
Ja tā, tad tev palīdzēs visvienkāršākais std::map (vai jebkāds cits asociatīvs konteiners tavis izmantotajās bibliotēkās/freimworkā).
Code:

enum MyKey
{
    MOVE_FORWARD,
    MOVE_BACKWARD,
    MOVE_LEFT,
    MOVE_RIGHT,
    SHOOT,
    JUMP,
    ... // te sadefinē visas vajadzīgās darbības
};

typedef std::map<int, MyKey> Bindings;
Bindings bindings; // šis glabās mapu no sistēmas pogām uz tavām

void CreateDefaultBindings() // saliek defaultās pogas
{
     bindings.insert(std::make_pair('W', MOVE_FORWARD));
     bindings.insert(std::make_pair('S', MOVE_BACKWARD));
     bindings.insert(std::make_pair('A', MOVE_LEFT));
     bindings.insert(std::make_pair('D', MOVE_RIGHT));
     bindings.insert(std::make_pair(MOUSE_BUTTON_1, SHOOT));
     bindings.insert(std::make_pair(' ', JUMP));
}
// ja tavs lietotais Input API nedefinē tādu MOUSE_BUTTON_1 konstanti,
// tad vari izmantot kautkādu paša izdomātu negatīvu konstanti (lai nesajauktu ar normāliem burtiem)
// tipa -1=button_1, -2=button_2, utt...
// tik atceries zemāk to pārkonvertēt uz šiem negatīvajiem skaitļiem ņemot informāciju par peles pogām no sistēmas



// tagad visās vietās, kur no Input'a API dabūt pogas nospiedienu, tur pārkonvertē to uz savu enumu izmantojot bindings mapu:
...
int system_key =  GetPressedKeyFromSystem();
Bindings::const_iterator it = bindings.find(system_key);
if (it == bindings.end())
{
    // kļūda
    // system_key ir poga, kura nav bindings mapā
    // droši vien jāignorē pogas nospiedienu
}
else
{
    MyKey my_key = it->second;
    // tagad šeit vari lietot my_key savā kodā
    // ...
}
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 08, 2007 12:15 pm    Post subject:

neticu, ka tev nav skaidrs, ko es gribu panaakt, jo shis ir tieshi tas, ko man vajadzeeja Smile paldies! Smile aa un tikko iemekleeju par std namespace referenci - http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespacestd.html - sho atradu, buus jaasaak lasiit! bet varbuut tu zini veel kaadu paarskataamaaku, klasificeetaaku dokumentaaciju (kuraa piemeeram ir shaadas kategorijas: datu struktuuras, IO, veel kautkas, ...)?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Sep 08, 2007 12:34 pm    Post subject:

Es lietoju MSDN'u, tb dokumentāciju, kas nāk līdzi Microsoft Visual C++'am.
Tā ir pieejama arī onlainā: http://msdn2.microsoft.com/en-us/library/cscc687y(VS.80).aspx
Vēl ir šis te: http://www.sgi.com/tech/stl/index.html
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 08, 2007 12:45 pm    Post subject:

ok, shie buus labi!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 08, 2007 2:43 pm    Post subject:

lai nepiebaaztu forumu ar jauniem topikiem, jautaaju te:
kaa saucas tas events, kursh paraada, ka parent window'am ir izmainiits lielums? tas pats WM_SIZE vai kaads cits? runaaju par tiem eventiem, kurus apstraadaa "LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);"...
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Sep 08, 2007 7:29 pm    Post subject:

Un kāpēc gan tu kārtējo reizi neapskati dokumentāciju?
http://msdn2.microsoft.com/en-us/library/ms632646.aspx
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 08, 2007 7:37 pm    Post subject:

ak jaa tas pats vien ir, bet man ir tagad probleemas ar taa eventa dabuushanu no parent window'a! es njemu PeekMessage un skatos, vai parent window'am, ne esoshajam, tiek izmainiits lielums, kaa es to daru, ja man ir viens logs.. bet proga nedabuu taa loga izmainjas! tikai shii loga! vienalga, ko es tajaa PeekMessage(..,TE,..,..,..) rakstiitu...
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Sep 08, 2007 8:29 pm    Post subject:

Tev PeekMessage nav jāaiztiek. Loga eventi jāapstrādā WindowProc funkcijā.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 08, 2007 9:00 pm    Post subject:

nu man taa domaats, ka es visu laiku palaizhu funkciju, kura ar peekmessage paarbauda, vai ir kaada jauna zinja, un tad to apstraadaa translatemessage un dispatchmessage funkcijas!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 08, 2007 9:04 pm    Post subject:

un - ja kas - es veidoju DLL, taapeec probleema ar parent-child window'iem
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Sep 08, 2007 11:34 pm    Post subject:

DispatchMessage funkcija padod messages tālāk uz WindowProc apstrādāšanai. Tev WindowProcā ir jāapstrādā messages, nevis no PeekMessage dabūtās. Palasi takš ko dara tas PeekMessage/DispatchMessage/WindowProc.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Sep 09, 2007 9:44 pm    Post subject:

nu man vispirms tak taa zinja jaadabuu - un to izdara peekmessage! bez taa man zinjas nepienaaktu, un taadeejaadi nav, ko apstraadaat ar translatemessage un dispatchmessage, kursh savukaart palaizh to windowproc!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Sep 09, 2007 10:06 pm    Post subject:

Ar to, ka nav jāaiztiek PeekMessage, es biju domājis to, ka tev nevajag apstrādāt pa tiešo messāges no PeekMessage. Tev tās jāpadod DispatchMessage handlerim, kas pados to tālāk tavam WindowProc'am. Jo iepriekš tu teici, ka kautko tur čakarē ar to PeekMessage, lai apstrādātu WM_SIZE eventu. Tāpēc teicu, lai to neaiztiec.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Sep 09, 2007 10:18 pm    Post subject:

ahaa, nu ja, bet es teicu, ka es arii taa daru: peekmessage->translatemessage->dispatchmessage->windowproc
aa un kaa tad lai es dabuuju zinaat, kad/vai parent logam tiek izmainiits lielums?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group