我和Jquery做了一场pacman游戏。 Pacman的运动由箭头键指示,它触发一个setInterval(),使他反复移动他的宽度距离,给人一种他完全笔直移动的错觉。按下一个新键可以清除间隔,然后开始移动到其他地方。
function Player(){
this.left = $('#pacMan').css('left');
/**/
this.top = $('#pacMan').css('top');
/**/
this.rightMove = function(){
if (){
this.left = parseInt(this.left) + 20;
$('#pacMan').animate({'left': this.left}, 100);
}
};
//包含移动方法的对象。空if语句是我稍后会遇到的问题。
var timer;
$('body').keydown(function () {
var key = event.which;
window.clearInterval(timer);
timer = window.setInterval(function() {
switch (key) {
case 37:
pacMan.leftMove();
break;
// keydown函数。我知道,这种脱节都是如此。
所以上面的工作正常。我的问题是这样的:如果我换上墙会发生什么?我怎么能让他停下来?我可以用一个块来做,但不是很多。让我解释一下。
所以我把整个东西放在一个格子上,这个格子是pacman的宽度。我将div子项附加到其中一个网格中,选择它旁边的网格框并将其放入数组中。我最初的if声明是,如果Pacman的位置与相邻网格的位置共享,他的一个动作就被禁用了。所以如果他刚刚离开了那个区块,他就不能移动是的,给出了阻止他阻止他移动的错觉。 e.g
If(Pacman.position().left !== gridBox120.position.left(){
pacMan.moveRight()
}
else{
clearInterval()
}
//只要pacman不在街区附近,他就可以向右移动。
这很有效。但如果我想在舞台上有多个街区怎么办?我怎么能在if语句中获得所有这些东西块?或者这是最好的方式吗?
我的计划是将邻近的divs ID放在一个数组中,如果Pacman的位置分享阵列中任何ID项的位置,他就无法向右移动
我不知道该怎么做。某种迭代?或者阵列不是最好的想法吗?
如果没有正确解释,我会回复评论。
Image link. yellow is pacman. purple are the neighbor divs that are sent to arrays
答案 0 :(得分:0)
我已经为砖破碎机做了类似的事情。 我已经测试了用于存储块的obj和数组。数组比obj快得多。 我的方法是:将所有网格存储在数组中 并在每次移动后验证左-1,左+ 1,上-1和上+ 1
ActionController