2013-10-10 2 views
1

Я пишу этот код, чтобы сделать базовую игру. Полный HTML является:js исполняется только в определенное время?

<!DOCTYPE> 
<html> 
    <head> 
     <title>The dodge game</title> 
     <link rel="stylesheet" type="text/css" href="normalize.css"> 
     <link rel="stylesheet" type="text/css" href="index.css"> 
     <script src="jquery.js"></script> 
     <script src="script.js"></script> 
    </head> 
    <body> 
     <div id="play-ground"> 
     <div id="character"></div> 
     <div id="chaser"></div> 
     </div> 
     <button id="control-up" class="button">UP</button> 
     <button id="control-down" class="button">DOWN</button> 
     <button id="control-right" class="button">RIGHT</button> 
     <button id="control-left" class="button">LEFT</button> 
    </body> 
</html> 

сценарий:

$(document).ready (
    function() { 
     var characterPositionLeft = 0; 
     var characterPositionTop = 0; 
     var chaserPositionLeft = 810; 
     var chaserPositionTop = 630; 
     var speed = 30; 
     var dspeed = 60; 
     var apoint = 5; 
     var testPositionLeft = function() { 
      if (chaserPositionLeft > characterPositionLeft) { 
       chaserPositionLeft -= 30; 
       var caLeft = chaserPositionLeft + 'px'; 
       $('#chaser').css('margin-left', caLeft); 
       leftRight(); 
       topBottom(); 
       testEndGame(); 
       console.log(chaserPositionLeft); 
      } else if (chaserPositionLeft < characterPositionLeft) { 
       chaserPositionLeft += 30; 
       var caLeft = chaserPositionLeft + 'px'; 
       $('#chaser').css('margin-left', caLeft); 
       leftRight(); 
       topBottom(); 
       testEndGame(); 
       console.log(characterPositionLeft); 
      } 
     } 
     var testPositionTop = function() { 
      if (chaserPositionTop > characterPositionTop) { 
       chaserPositionTop -= 30; 
       var caTop = chaserPositionTop + 'px'; 
       $('#chaser').css('margin-top', caTop); 
       leftRight(); 
       topBottom(); 
       testEndGame(); 
       console.log(chaserPositionTop); 
      } else if (chaserPositionTop < characterPositionTop) { 
       chaserPositionTop += 30; 
       var caTop = chaserPositionTop + 'px'; 
       $('#chaser').css('margin-top', caTop); 
       leftRight(); 
       topBottom(); 
       testEndGame(); 
       console.log(chaserPositionTop); 
      } 
     } 
     // left and right 
     var CacLeftPlus = chaserPositionLeft + 30; 
     var CacLeftMinus = chaserPositionLeft - 30; 
     var LeftCaught = false; 
     // top and bottom 
     var CacTopPlus = chaserPositionTop + 30; 
     var CacTopMinus = chaserPositionTop - 30; 
     var TopCaught = false; 
     // up 
     $('#control-up').click ( 
      function() { 
       testPositionTop(); 
       if(characterPositionTop > 0) { 
       characterPositionTop -= speed; 
       var cTop = characterPositionTop + 'px'; 
       console.log(characterPositionTop); 
       $('#character').css('margin-top', cTop); 
       leftRight(); 
       topBottom(); 
       testEndGame(); 
       } else { 
        console.log('warning: [reached sky limit]'); 
       } 
      } 
     ) 
     // down 
     $('#control-down').click ( 
      function() { 
       testPositionTop(); 
       if(characterPositionTop < 630) { 
       characterPositionTop += speed; 
       var cTop = characterPositionTop + 'px'; 
       console.log(characterPositionTop); 
       $('#character').css('margin-top', cTop); 
       leftRight(); 
       topBottom(); 
       testEndGame(); 
       } else { 
        console.log('warning: [reached earth limit]'); 
       } 
      } 
     ) 
     // right 
     $('#control-right').click ( 
      function() { 
       testPositionLeft(); 
       if(characterPositionLeft < 810) { 
       characterPositionLeft += speed; 
       var cTop = characterPositionLeft + 'px'; 
       console.log(characterPositionLeft); 
       $('#character').css('margin-left', cTop); 
       leftRight(); 
       topBottom(); 
       testEndGame(); 
       } else { 
        console.log('warning: [reached right limit]'); 
       } 
      } 
     ) 
     // left 
     $('#control-left').click ( 
      function() { 
       testPositionLeft(); 
       if(characterPositionLeft > 0) { 
       characterPositionLeft -= speed; 
       var cTop = characterPositionLeft + 'px'; 
       console.log(characterPositionLeft); 
       $('#character').css('margin-left', cTop); 
       leftRight(); 
       topBottom(); 
       testEndGame(); 
       } else { 
        console.log('warning: [reached left limit]'); 
       } 
      } 
     ) 
     var leftRight = function() { 
      if(characterPositionLeft == CacLeftPlus || characterPositionLeft == CacLeftMinus) { 
       LeftCaught = true; 
       console.log('worked?'); 
      } else { 

      } 
     } 
     var topBottom = function() { 
      if(characterPositionTop == CacTopPlus || characterPositionLeft == CacTopMinus) { 
       TopCaught = true; 
       console.log('worked?'); 
      } else { 

      } 
     } 
     var testEndGame = function() { 
      if (LeftCaught == true && TopCaught == true) { 
      console.log('game over'); 
      alert('game over'); 
     } else { 

     } 
     } 
    } 
) 

Все отлично работает до тех пор функции LeftRight, upBottom и testEndGame. Они только консоль работает, когда консоль регистрируется 600 и 630. Может кто-нибудь, пожалуйста, сообщите мне об этом недостатке и о том, как это исправить? Вот полный код: http://jsfiddle.net/StK7r/1/

ответ

1

Я считаю, что вы хотите

if(characterPositionTop == CacTopPlus || characterPositionLeft == CacTopMinus) { 

вместо этого теста

if(characterPositionTop <= CacTopPlus && characterPositionTop >= CacTopMinus) { 

потому, что вы собираетесь вашего персонажа, чтобы быть пойманным внутри коробки. То же самое для левой. Кроме того, вы тестировали свою «верхнюю» позицию против «левой».

EDIT позже:

Я обновил скрипку немного. Я заметил это также:

 // left and right 
    var CacLeftPlus = chaserPositionLeft + 30; 
    var CacLeftMinus = chaserPositionLeft - 30; 
    var LeftCaught = false; 
    // top and bottom 
    var CacTopPlus = chaserPositionTop + 30; 
    var CacTopMinus = chaserPositionTop - 30; 

Вы не обновляете эти переменные при изменении chaserPositionTop/Left. Они привязаны по значению здесь, поэтому, очевидно, они оставались навсегда при значении, которое вы даете им в инициализаторе.

+1

+1 для понимания (я думаю), что игра должна была делать, я бы только поняла код :) – Nunners

+0

+1, каждый раз, когда я хочу добавить код, мне нужно все это прочитать – Haiz

+0

все еще не работает, не знаю почему – Haiz

Смежные вопросы