Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z funkcja onKeyDown..js
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Mastersieciweb
Witam, nie wiem w jaki sposób uaktywnić funkcję żeby za pomocą klawisza strzałki do góry moje pole zwiększyło się, gdzie tu jest błąd..z góry dziękuje
  1. <head>
  2.  
  3.  
  4. </head>
  5.  
  6. <body>
  7. function na(e){
  8. var bb=e.keyCode;
  9. var cc= document.getElementById('jeden');
  10. if (bb==38){
  11. cc.style.width="300px";}
  12. }
  13. </script>
  14. <div id="jeden" onkeydown="na(e)" style="width:100px;height:50px;background-color:red" ></div>
  15. </body>
  16. </html>
  17.  
Mastersieciweb
dziękuje WERDAN:-)

No ale w takim razie dlaczego to nie działa?..

  1. <head>
  2.  
  3. <title>snake</title>
  4. </head>
  5.  
  6. <body>
  7. function na(e){
  8. var bb=e.keyCode;
  9. var cc= document.getElementById('jeden').style;
  10. if (bb==38){
  11.  
  12. cc.left=parseInt(cc.left)+300;}
  13. }
  14.  
  15. document.onkeydown = na;
  16. </script>
  17. <div id="jeden" style="width:100px;height:50px;background-color:red;margin-left:0px" ></div>
  18. </body>
  19. </html>
  20.  
Mastersieciweb
a to jeszcze mam pytanko do tej funkcji, żeby po naciśnięciu klawisza już samo moje pole sie przemieszczało o zadaną wartość:

  1.  
  2. function na(e){
  3. bb=e.keyCode;
  4. cc= document.getElementById('jeden').style;
  5. if (bb==39){
  6. function ol(){
  7. cc.left=parseInt(cc.left)+10+"px";
  8. var d=setTimeout("ol();",100);
  9. }
  10. return ol();
  11. }
  12. d=document.onkeydown = na;
  13.  
  14.  
Mastersieciweb
ale jaja:-) dziękuje, w razie W bede pytal dalej:-)

jeszcze pytanko mam, dlaczego nie tworzy mi ta funkcja nowego diva.. jesli warunek jest spełniony

  1. function ol4(){
  2. cc.top=parseInt(cc.top)-50+"px";
  3. if(parseInt(cc.top)<0){
  4. cc.top=parseInt(cc.top)+500+"px";;}
  5. if(parseInt(cc.top)>500){
  6. cc.top=parseInt(cc.top)-500+"px";;}
  7. if((parseInt(cc.left)==parseInt(cc2.left))&&(parseInt(cc.top)==parseInt(cc2.top))){
  8. cc2.left=i+"px";
  9. cc2.top=ii+"px";
  10. var div1 = document.createElement('div');
  11. div1.style.width="50px";
  12. div1.style.height="50px";
  13. div1.style.color="yellow";
  14. div1.style.position="absolute";
  15. div1.style.left=parseInt(div1.style.left)+30+"px";
  16. div1.style.top=parseInt(div1.style.top)+30+"px";}
  17. }
werdan
  1. document.body.appendChild(div1);


Element utworzyłes, ale go nigdzie nie podpiąłes. biggrin.gif
Mastersieciweb
mam jeszcze pytanie:-) jeśli nacisne ponownie klawisz ta funkcja przyspieszy mi poruszanie się mojego kwadratu a jak zrobić żeby ponowne naciśnięcie nie przyspieszało jeszcze bardziej tego przemieszczania się?wink.gif


http://jsbin.com/IJuTecI/3/edit?html,js,output
Mastersieciweb
spojrzalbys na ten kod?:-) badziewnie pewnie wyglada,moim zadaniem bylo zrobienie takiej gierki(snake) z tym że nie wiem czy tą metodą co robie jestem w stanie taki efekt uzyskać. Pomieszałem troche tego wszystkiego, przetestuj ten problem jak możesz, ewentualnie jakieś sugestie, poprawki, co mógłbym zrobić, bo zostaje kwestia jeszcze klonowania diva, ale nie mam zielonego pojęcia jak tu to umiejscowić itp..;-)

  1. <head>
  2. <meta charset=utf-8 />
  3. <title>snake2</title>
  4. </head>
  5.  
  6. <body>
  7. function na(e){
  8. bb=e.keyCode;
  9. cc= document.getElementById('jeden').style;
  10. cc2= document.getElementById('dwa').style;
  11. var i = 100*Math.round(5*(Math.random()));
  12. var ii = 100*Math.round(5*(Math.random()));
  13. var isMoving = false;
  14.  
  15. if (bb==39){
  16. if(!isMoving){
  17. isMoving = true;
  18. d1=setInterval(function(){ol();},500);
  19. }}else {clearInterval(d1);}
  20. if (bb==40){
  21. if(!isMoving){
  22. isMoving = true;
  23.  
  24. d2=setInterval(function(){ol2();},500);
  25. }}else {clearInterval(d2);}
  26. if (bb==37){
  27. if(!isMoving){
  28. isMoving = true;
  29.  
  30. d3=setInterval(function(){ol3();},500);
  31. }}else {clearInterval(d3);}
  32. if (bb==38){
  33. if(!isMoving){
  34. isMoving = true;
  35.  
  36. d4=setInterval(function(){ol4();},500);
  37. }} else {clearInterval(d4);}
  38.  
  39.  
  40.  
  41.  
  42. function ol(){
  43. cc.left=parseInt(cc.left)+50+"px";
  44.  
  45. if(parseInt(cc.left)>500){
  46. cc.left=parseInt(cc.left)-550+"px";;}
  47. if((parseInt(cc.left)==parseInt(cc2.left))&&(parseInt(cc.top)==parseInt(cc2.top))){
  48. cc2.left=i+"px";
  49. cc2.top=ii+"px";
  50. }
  51. }
  52.  
  53.  
  54.  
  55.  
  56. function ol2(){
  57. cc.top=parseInt(cc.top)+50+"px";
  58.  
  59. if(parseInt(cc.top)>500){
  60. cc.top=parseInt(cc.top)-550+"px";;}
  61. if((parseInt(cc.left)==parseInt(cc2.left))&&(parseInt(cc.top)==parseInt(cc2.top))){
  62. cc2.left=i+"px";
  63. cc2.top=ii+"px";
  64. }
  65. }
  66.  
  67.  
  68.  
  69. function ol3(){
  70.  
  71. cc.left=parseInt(cc.left)-50+"px";
  72.  
  73. if(parseInt(cc.left)<0){
  74. cc.left=parseInt(cc.left)+550+"px";;}
  75.  
  76. if((parseInt(cc.left)==parseInt(cc2.left))&&(parseInt(cc.top)==parseInt(cc2.top))){
  77. cc2.left=i+"px";
  78. cc2.top=ii+"px";}
  79. }
  80.  
  81.  
  82.  
  83.  
  84. function ol4(){
  85. cc.top=parseInt(cc.top)-50+"px";
  86. if(parseInt(cc.top)<0){
  87. cc.top=parseInt(cc.top)+550+"px";;}
  88.  
  89. if((parseInt(cc.left)==parseInt(cc2.left))&&(parseInt(cc.top)==parseInt(cc2.top))){
  90. cc2.left=i+"px";
  91. cc2.top=ii+"px";
  92.  
  93. }
  94. }
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101. }
  102.  
  103. d=document.onkeydown = na;
  104. </script>
  105. <div id="tlo" style="position:absolute;width:550px;height:550px;background-color:green;left:0px;top:0px;" ></div>
  106. <div id="jeden" style="position:absolute;width:50px;height:50px;background-color:red;left:0px;top:0px;" ></div>
  107. <div id="dwa" style="position:absolute;width:50px;height:50px;background-color:blue;left:100px;top:0px;" ></div>
  108.  
  109. </body>
  110. </html>
  111.  
  112.  
werdan
  1. <head>
  2. <meta charset=utf-8 />
  3. <title>snake2</title>
  4. </head>
  5.  
  6. <body>
  7. function na(e) {
  8. bb = e.keyCode;
  9. cc = document.getElementById('jeden').style;
  10. cc2 = document.getElementById('dwa').style;
  11. var i = 100 * Math.round(5 * (Math.random()));
  12. var ii = 100 * Math.round(5 * (Math.random()));
  13. var isMoving = false;
  14.  
  15. if (bb == 39) {
  16. if (!isMoving) {
  17. isMoving = true;
  18. d1 = setInterval(function() {
  19. ol();
  20. }, 500);
  21. }
  22. } else {
  23. clearInterval(d1);
  24. }
  25. if (bb == 40) {
  26. if (!isMoving) {
  27. isMoving = true;
  28.  
  29. d2 = setInterval(function() {
  30. ol2();
  31. }, 500);
  32. }
  33. } else {
  34. clearInterval(d2);
  35. }
  36. if (bb == 37) {
  37. if (!isMoving) {
  38. isMoving = true;
  39.  
  40. d3 = setInterval(function() {
  41. ol3();
  42. }, 500);
  43. }
  44. } else {
  45. clearInterval(d3);
  46. }
  47. if (bb == 38) {
  48. if (!isMoving) {
  49. isMoving = true;
  50.  
  51. d4 = setInterval(function() {
  52. ol4();
  53. }, 500);
  54. }
  55. } else {
  56. clearInterval(d4);
  57. }
  58.  
  59.  
  60.  
  61.  
  62. function ol() {
  63. cc.left = parseInt(cc.left) + 50 + "px";
  64.  
  65. if (parseInt(cc.left) > 500) {
  66. cc.left = parseInt(cc.left) - 550 + "px";
  67. }
  68. if ((parseInt(cc.left) == parseInt(cc2.left)) && (parseInt(cc.top) == parseInt(cc2.top))) {
  69. cc2.left = i + "px";
  70. cc2.top = ii + "px";
  71. }
  72. }
  73.  
  74.  
  75.  
  76.  
  77. function ol2() {
  78. cc.top = parseInt(cc.top) + 50 + "px";
  79.  
  80. if (parseInt(cc.top) > 500) {
  81. cc.top = parseInt(cc.top) - 550 + "px";
  82. }
  83. if ((parseInt(cc.left) == parseInt(cc2.left)) && (parseInt(cc.top) == parseInt(cc2.top))) {
  84. cc2.left = i + "px";
  85. cc2.top = ii + "px";
  86. }
  87. }
  88.  
  89.  
  90.  
  91. function ol3() {
  92.  
  93. cc.left = parseInt(cc.left) - 50 + "px";
  94.  
  95. if (parseInt(cc.left) < 0) {
  96. cc.left = parseInt(cc.left) + 550 + "px";
  97. }
  98.  
  99. if ((parseInt(cc.left) == parseInt(cc2.left)) && (parseInt(cc.top) == parseInt(cc2.top))) {
  100. cc2.left = i + "px";
  101. cc2.top = ii + "px";
  102. }
  103. }
  104.  
  105.  
  106.  
  107.  
  108. function ol4() {
  109. cc.top = parseInt(cc.top) - 50 + "px";
  110. if (parseInt(cc.top) < 0) {
  111. cc.top = parseInt(cc.top) + 550 + "px";
  112. }
  113.  
  114. if ((parseInt(cc.left) == parseInt(cc2.left)) && (parseInt(cc.top) == parseInt(cc2.top))) {
  115. cc2.left = i + "px";
  116. cc2.top = ii + "px";
  117.  
  118. }
  119. }
  120. }
  121.  
  122. d = document.onkeydown = na;
  123. </script>
  124. <div id="tlo" style="position:absolute;width:550px;height:550px;background-color:green;left:0px;top:0px;" ></div>
  125. <div id="jeden" style="position:absolute;width:50px;height:50px;background-color:red;left:0px;top:0px;" ></div>
  126. <div id="dwa" style="position:absolute;width:50px;height:50px;background-color:blue;left:100px;top:0px;" ></div>
  127.  
  128. </body>
  129. </html>
  130.  
  131.  
  132.  



Dobrze Ci idzie. Wyglada jak wygląda. Coś tam poprawiłem, bo jakieś błedy były (średniki, nawias).
Troche dziwnie działa.
Jak daje np. w prawo to idzie w prawo i do góry, bo wczesniej szedł do góry.

Troche sie inaczej to robi. W grach zawsze jest loop (czyli petla która sie wykonuje np. 60x na sekunde). I to własnie w tej petli sterujemy graczem i innymi elementami. Klikając kursory ustawiamy przesuniecia X i Y, a potem w petli wykonujemy je. W petli tez należałoby zrobić zjadanie "obiektu" (ofiary). Jesli pozycja głowy weza jest taka sama jak ofiary, to ofiare usuwamy, tworzymy nowa, a weza wydłuzamy biggrin.gif. Weza najlepiej trzymac w tablicy biggrin.gif


U ciebie sa 4 loopy. Sprobuj zrobić 1 loop (setInterval), a w tych 4 funkcjach tylko ustawiać przesuniecia X i Y.

Mastersieciweb
nie wiem za bardzo w jaki sposób wykorzystac tutaj petle i przypisac kierunki..


a zalozmy ze wszystko jest do przyjecia tylko zostaje kwestia dodania klonu? ktory porusza sie jak nasz div, jest taki sam i dodajemy go w momencie (nalozenia)na niebieskiego.. tylko że nie wiem w jaki sposob zapisac ze klon ma miec doklanie taka sama pozycje jak div ruch wczesniej.. nie mam pojecia..
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.