Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Obsługa klawiatury
Forum PHP.pl > Forum > XML, AJAX
remosek
Na początku wrzuce kodzik
  1. $(window).bind("keydown", function(oEvent)
  2. {
  3. if(oEvent.keyCode == 87 || oEvent.keyCode == 38)
  4. {
  5. if(go==true)
  6. {
  7. send(0,75,0,1);
  8. }
  9. }
  10. if(oEvent.keyCode == 65 || oEvent.keyCode == 37)
  11. {
  12. if(go==true)
  13. {
  14. send(75,0,3,2);
  15. }
  16. }
  17. if(oEvent.keyCode == 83 || oEvent.keyCode == 40)
  18. {
  19. if(go==true)
  20. {
  21. send(0,-75,2,3);
  22. }
  23. }
  24. if(oEvent.keyCode == 68 || oEvent.keyCode == 39)
  25. {
  26. if(go==true)
  27. {
  28. send(-75,0,1,4);
  29. }
  30. }
  31. });

Mam problem z tym kodzikiem gdyż jak przyrzymam jeden z klawiszy np W, to skrypt omija sprawdzanie czy go==true i odrazu wykonuje funkcje send. wrzuce kawałek odpowiedzialny za zmienianie go z false do true.
  1. function send(ox,oy,direction)
  2. {
  3. $.ajax({
  4. type: "POST",
  5. url: "checkField.php",
  6. data:"nx="+(x2)+"&ny="+(y2)+"&nisland="+(island),
  7. success: function(msg){
  8. if(msg){
  9. go=false;
  10. setTimeout("map_pos(x+="+(ox/4)+",y+="+(oy/4)+");animation(0,"+direction+");",50);
  11. setTimeout("map_pos(x+="+(ox/4)+",y+="+(oy/4)+");animation(1,"+direction+");",100);
  12. setTimeout("map_pos(x+="+(ox/4)+",y+="+(oy/4)+");animation(2,"+direction+");",150);
  13. setTimeout("map_pos(x+="+(ox/4)+",y+="+(oy/4)+");animation(1,"+direction+");",200);
  14. setTimeout("go=true;",220);
  15. } else {
  16. alert("Error!");
  17. }
  18. }
  19. });
  20. }

Licze na szybkie odpowiedzi smile.gif)
piotrex41
A może by tak użyć .keyup(); lub .bind("keyup", function(oEvent){ ... }); ? Wtedy skrypt uruchomi działanie po zwolnieniu klawisza (kiedy zostanie wciśnięty i "puszczony").
remosek
wpadłem na to dawno ale nie chce tego z 2 powodów:
1. Chce gdy się przytrzyma klawisz to aby postać chodzila po mapie, a nie gdy sie zwolni.
2. Jezli szybko zacznie sie klikać to i tak omija blokadae go=true / go=false
erix
Podpowiedź: keypress -> ustawiasz flagę. Potem sprawdzasz, czy ona istnieje, czy jednak nie i na tej podstawie sprawdzasz, czy klawisz jest trzymany.
remosek
flage?
erix
No tak:
- keypress -> flaga + wykonanie, jeśli była wcześniej false (zapobiegnie to wielokrotnemu wykonaniu)
- keyup -> czyści flagę
remosek
flaga to np go=true/false questionmark.gif
erix
A przeczytałeś uważnie mojego posta?
remosek
dobra wiem juz myślałem że z tym wykonaniem o zmienna go=true/false ci chodziło sorrki ;/

nie może tak być bo mój skrypt chodzenia po mapie omija przeszkody wtedy tzn. że kolizje się nie wykonują poprawnie ja może wrzuce cały skrypt i zobaczysz o co chodzi.
  1. var x,y,pos,x2,y2,island,yt,xt;
  2. var go=true;
  3.  
  4. $(document).ready(function()
  5. {
  6.  
  7. $(window).bind("keyup", function(oEvent)
  8. {
  9. if(oEvent.keyCode == 87 || oEvent.keyCode == 38)
  10. {
  11. if(go==true)
  12. {
  13. send(0,75,0,1);
  14. go=false;
  15. }
  16. }
  17. if(oEvent.keyCode == 65 || oEvent.keyCode == 37)
  18. {
  19. if(go==true)
  20. {
  21. send(75,0,3,2);
  22. }
  23. }
  24. if(oEvent.keyCode == 83 || oEvent.keyCode == 40)
  25. {
  26. if(go==true)
  27. {
  28. send(0,-75,2,3);
  29. go=false;
  30. }
  31. }
  32. if(oEvent.keyCode == 68 || oEvent.keyCode == 39)
  33. {
  34. if(go==true)
  35. {
  36. send(-75,0,1,4);
  37. }
  38. }
  39.  
  40. });
  41.  
  42. setInterval(function()
  43. {
  44. $.ajax({
  45. type: "POST",
  46. url: "walk.php",
  47. data:"x="+(x2)+"&y="+(y2)+"&island="+(island)
  48. });
  49. },1000);
  50.  
  51. });
  52. function send(ox,oy,direction,pos)
  53. {
  54. switch(pos)
  55. {
  56. case 1:
  57. y2--;
  58. break;
  59. case 2:
  60. x2--;
  61. break;
  62. case 3:
  63. y2++;
  64. break;
  65. case 4:
  66. x2++;
  67. break;
  68. }
  69. $.ajax({
  70. type: "POST",
  71. url: "checkField.php",
  72. data:"nx="+(x2)+"&ny="+(y2)+"&nisland="+(island),
  73. success: function(msg){
  74. if(msg){
  75. go=false;
  76. setTimeout("map_pos(x+="+(ox/4)+",y+="+(oy/4)+");animation(0,"+direction+");",50);
  77. setTimeout("map_pos(x+="+(ox/4)+",y+="+(oy/4)+");animation(1,"+direction+");",100);
  78. setTimeout("map_pos(x+="+(ox/4)+",y+="+(oy/4)+");animation(2,"+direction+");",150);
  79. setTimeout("map_pos(x+="+(ox/4)+",y+="+(oy/4)+");animation(1,"+direction+");",200);
  80. setTimeout("go=true;",220);
  81. } else {
  82. alert("Error!");
  83. switch(pos)
  84. {
  85. case 1:
  86. y2++;
  87. break;
  88. case 2:
  89. x2++;
  90. break;
  91. case 3:
  92. y2--;
  93. break;
  94. case 4:
  95. x2--;
  96. break;
  97. }
  98. }
  99. }
  100. });
  101. }
  102. function animation(frame,direction)
  103. {
  104. $("#me").css("background-position",(-frame*64)+"px "+(-direction*79)+"px");
  105. }
  106. function map_pos(x,y)
  107. {
  108. $("#map").css("margin-left",(x)+"px");
  109. $("#map").css("margin-top",(y)+"px");
  110. }
erix
Grasz w piłkę też na kartce?

Wystaw to live.
remosek
w jQuery jest początkujący i nie wiem gdzie to .live() mam wstawić ?
erix
Miałem na myśli skrypt na żywo... sleep.gif
remosek
jak to wykonać ?

questionmark.gif

dostane odpowiedź jak to zrobić na żywo czy skrypt mam odswierzac czy co ?
toaspzoo
Cytat(erix @ 27.07.2012, 11:12:18 ) *
Grasz w piłkę też na kartce?

Wystaw to live.

Cytat(remosek @ 28.07.2012, 12:40:34 ) *
jak to wykonać ?

questionmark.gif

dostane odpowiedź jak to zrobić na żywo czy skrypt mam odswierzac czy co ?


...
Wrzuć live, czyli zaprezentuj działanie kodu na stronie !



Bo chyba nie piszesz kodu na poczekaniu, nie testując go, co nie ? blink.gif
remosek
ok rozumiem teraz sekunda i wrzuce


http://mangawars.uphero.com/
email: test123@gmail.com
hasło: test123
Chodzisz strzałkami lub WASD

I co macie jakąś porade jak to zrobić ?

questionmark.gif?
ShadowD
Ogarnij to jakoś bo zamiast poruszania włącza mi się w ff wyszukiwarka słów na stronie, poza tym nie wiem gdzie niby stoi postać bo oprócz trawy i wody nic nie ma (ok, czarna przestrzeń jeszcze - nie byt?).
remosek
to poprostu zrób nowe konto nie mam zrobionego jeszcze rpzesówania mapy a ktoś się zaloguje na testowe wyjdzie poza teren i bum nie ma postacji

postac jest widoczna juz


pomoże ktoś ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.