keyRepeated
Michal - 13-03-2006 11:37
keyRepeated
Wlasnie jestem w trakcie pisania gry na komorke i mam taki oto problem. Chcialem zeby obiekt na ekranie przesuwal sie takze w momencie kiedy uzytkownik nadusi i przytrzyma przycisk. Znalazlem w dokumentacji funkcje KeyRepeated. Niestety nie dziala. Czyli mam np. kod : public void keyRepeated(int key) { int action = getGameAction(keyCode);
switch (action) { case LEFT: bat.moveLeft(); break; case RIGHT: bat.moveRight(); break; } repaint(); }
Jak nacisne klawisz to nic sie nie dzieje jak zmienie nazwe funkcji na keyPressed to dziala tylko wtedy jak sie przytrzymuj klawisz to nic sie nie dzieje. Dodam ze testy przeprowadzalem w symulatorze WTK. Czy to blad z mojej strony czy moze zla implementacja keyRepeated ?
clyde - 13-03-2006 11:37
Michal napisał(a): > Wlasnie jestem w trakcie pisania gry na komorke i mam taki oto problem. > Chcialem zeby obiekt na ekranie przesuwal sie takze w momencie kiedy > uzytkownik nadusi i przytrzyma przycisk. Znalazlem w dokumentacji funkcje > KeyRepeated. Niestety nie dziala. > Czyli mam np. kod : > public void keyRepeated(int key) { > int action = getGameAction(keyCode); > > switch (action) { > case LEFT: > bat.moveLeft(); > break; > case RIGHT: > bat.moveRight(); > break; > } > repaint(); > } > > Jak nacisne klawisz to nic sie nie dzieje jak zmienie nazwe funkcji na > keyPressed to dziala tylko wtedy jak sie przytrzymuj klawisz to nic sie nie > dzieje. Dodam ze testy przeprowadzalem w symulatorze WTK. Czy to blad z > mojej strony czy moze zla implementacja keyRepeated ? > > Hm.. nie bardzo rozumiem problem Ale: obsluga klawiszy w j2me jest dosc uproszczona -jak wcisniesz dostajesz keyPressed z nr klawisza -jak puscisz dostajesz keyReleased z numerem klawisza -w wielu telefonach nie ma oblsugi wcisniecia wielu klawiszy na raz. Tzn jak trzymasz wcisniety jeden klawisz to nie dostaniesz sygnalu wcisniecia drugiego dopoki nie zwolnisz tego pierwszego. W nowszych telefonach jest juz lepiej, ale i tak ta liczba jest ograniczona do dwoch lub 3 klawiszy. Najgorsze jest to ze, nie jest to wymagane. Zatem implementacja moze byc dowolna.
TO w zasadzie wszystko co cie powinno interesowac
Jezeli z zalozenia nie chcesz obslugiwac wiecej niz 1 klawisza na raz (kwestia kompatybilnosci w dol) to po prostu zatrzymuj klawisz wcisniety i zwrocony w keyPressed w jakiejs zmiennej i w glownej petli go analizuj dopoki funkcja keyReleased nie zaznaczy (na tej zmiennej) ze klawisz juz zostal wycisniety.
Jezeli mimo wszystko chcesz miec mozliwosc oblsugi wiecej niz 1 klawisza , mozesz skorzystac z dobrodziejstw MIDP 2.0 i tzw supress key Events oraz metody getKeyStates(). Po szczegoly najlepiej zajzec do dokumentacji klasy javax.microedition.lcdui.game.GameCanvas
--
clyde
Lukasz - 13-03-2006 11:37
> getKeyStates().
Jaki masz typ komórki?
Potwierdzam u mnie (Sony Ericsson) KeyRepeted równiez nie chciał działać i to nie tylko na WTK, ale równiez na real device. Używać getKeyStates().
-- Lukasz N 50 05' 04" E 19 53' 43"
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
tabeze z Worda do Corela
Prosty edytor diagramow ERD z zapisem xml
PS nic nie otwiera :-/
layer style
Kubek w 3D studio Max
[MSSQL] problem z (od)tworzeniem BD ze skryptu
ProFTPd i mod_sql
=?iso-8859-2?q?Ile_mo=BFna_pod=B3=B1czy=E6_klient=F3w_do_SQL_ Server_2005_Express=3F?=
[MSSQL] autoincrement
Oracle 8
zanotowane.pldoc.pisz.plpdf.pisz.plsulimczyk.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|