class - JQuery classes obstacles -


http://i.stack.imgur.com/zjxqx.png

i started learn jquery , decided make game bomberman.

i stuck 1 big problem: litle guy has stop in front of obstacles can't go throught them code stops on obstacle placed on top (also first added)

in code try checks each class (thats why didnt use id) won't work. tried fix "each" bugged everything.

$(document).ready(function(){

$("#main").append('<div id="player"></div>'); $("#main").append('<div id="test1" class="bottel" style="absolute; top:0px; left: 100px;"></div>'); $("#main").append('<div id="test2" class="bottel" style="absolute; top:30px; left: 100px;"></div>'); $("#main").append('<div id="test3" class="bottel" style="absolute; top:100px; left: 100px;"></div>'); $("#main").append('<div id="test4" class="bottel" style="absolute; top:200px; left: 100px;"></div>'); $("#main").append('<div id="test5" class="bottel" style="absolute; top:200px; left: 200px;"></div>'); //$(".bottel").css('left',100 + 'px');    movement() 

function movement(){

$(document).keydown(function(e) {         var position = $("#player").position();     var min = 270;      switch (e.keycode){         case 37:                 if (position.left >= 1) //&& $(".bottel").position().left -44 >= position.left)              {             if (($("div[class^='bottel']").position().left +44 <= position.left) || ($("div[class^='bottel']").position().left  >= position.left) || ($("div[class^='bottel']").position().top + 35 <= position.top )){             $("#player").css('left',(position.left) - 20 + 'px');             $("#player").css('background','url(left.png) no-repeat');             //});             }             else{             //alert("test");             //alert("test");                 //position = $("#player").position();             $("#player").css('left',(position.left) + 'px');             $("#player").css('background','url(left.png) no-repeat');              }              }                break;         case 38:               if (position.top >= 1 ){             if ($(".bottel").position().left + 35 <= position.left || $(".bottel").position().left - 40  >= position.left || $(".bottel").position().top + 41 <= position.top ){             $("#player").css('top',(position.top) - 20 + 'px');             $("#player").css('background','url(top.png) no-repeat');             }             else{             $("#player").css('top',(position.top) + 'px');             $("#player").css('background','url(top.png) no-repeat');             }             //$("#player").css('top',position.top - 20 + 'px');             //$("#player").css('background','url(top.png) no-repeat');             }               break;         case 39:          //$.each($("#main .bottel"), function(i, .bottel) {          //var location = $(".bottel").position().left;         //alert(location + ",");         //alert(position().left);              if (position.left <= 452 - 33) //&& $(".bottel").position().left -44 >= position.left)              {             if ($(".bottel").position().left -44 >= position.left || $(".bottel").position().top + 35 <= position.top || $(".bottel").position().left <= position.left ){             $("#player").css('left',(position.left) + 20 + 'px');             $("#player").css('background','url(right.png) no-repeat');             }             else{             $("#player").css('left',(position.left) + 'px');             $("#player").css('background','url(right.png) no-repeat');             }             }             //});              break;         case 40:               if (position.top <= 393 - 41){             $("#player").css('top',position.top + 20 + 'px');             $("#player").css('background','url(bottem.png) no-repeat');                          }           break;     } }); 

}

each() right way go. like:

case 37:    if (position.left > 0) {      var cangoleft = true;      $('.bottel').each(function() {       var obstacleposition = $(this).position();       if (...collision detection code...) {         cangoleft = false;         // optional: chuck 'return false;' in here stop each loop        }     });      if (cangoleft) {       $("#player").css({         'left': (position.left) - 20 + 'px',         'background':'url(left.png) no-repeat'       });     } else {       $("#player").css({         'left': (position.left) + 'px',         'background':'url(left.png) no-repeat'       });     }   }    break; 

the 'collision detection code' use this refer current obstacle you're checking, e.g.:

    if ((obstacleposition.left +44 <= position.left) || (obstacleposition.left  >= position.left) || (obstacleposition.top + 35 <= position.top )){ 

note: think collision detection code needs bit more work account obstacle's height.


Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -